- ベストアンサー
テキストカウンターができない詳しい人教えて!
#!/usr/bin/perl # 読み書きモードでファイルオープン # オープンできないときは強制終了 open(COUNT, "+<countdata") || die "File 'countdata' Open Error."; # ファイルをロックする #flock(COUNT,2); # ファイルから一行読みこむ $counter = <COUNT>; # カウントアップ $counter_new = $counter + 1; # ファイルポインタを先頭に戻す seek(COUNT, 0, 0); # ファイルに出力=書き込み print COUNT "$counter_new?n"; # ファイルクローズ close(COUNT); # ファイルロックを解除する #flock(COUNT,8); # ------- 出力はここから ------- # print "Content-type: text/html?n?n"; print << "END_OF_HTML"; <HTML> <BODY> <CENTER> <FONT size="6"><B> ようこそ<BR> あなたは<FONT color="red"> $counter_new </FONT>人目のお客様です </B></FONT> </CENTER> </BODY> </HTML> END_OF_HTML をcounter.cgiに保存してcountdataに0と打ち込んでwebサーバーにアップしましたが500エラーで見れません CGIの本通りに行いましたができませんサポートページもなく困っています ソースミスなどここが違うなどあったら教えて下さい あとパーミッションなども御願いします
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
1. #! /usr/bin/perl BEGIN{use CGI::Carp qw(fatalsToBrowser);} #<=この行を追加してみてください エラーの原因が表示される場合があります 手元のサーバー (Vine3.2 +Apache/1.3.33)で試してみましたが まず ソースから見て 500errorになる原因は 2. END_OF_HTML に改行が必要です END_OF_HTML <=ここでfileが終わりだとエラー END_OF_HTML <=ここでfileが終わりならOK END_OF_HTML __END__ <=勿論OK、終わりを意味します。スクリプトの終わりにこれを書く癖をつけるとこの手のエラーは無くなります http://allabout.co.jp/internet/cgiperl/closeup/CU20040421A/ 3. 前もってcountdataを作ってパーミッションを読み書き可能にしていないと500エラーに成ります この場合 File 'countdata' Open Error. という文字列をいきなり出力してしまうためで httpdはこんな文字列をいきなり返されても解釈できませんので500エラーに成ります countdataのパーミッションは取り合えず666にしておいてください (サーバーによっては600でも可) # ソースから見る限りはこの2つだけです また 1.に書いた行を追加すれば2.3.の場合でも500エラーには成らず画面にエラーの原因が表示されます 4. print"Content-type: text/html\n\n"; これは#3さんが指摘されていますね 勿論必要です 但し このスクリプトの場合 #をつけたままでも500エラーにはなりません 何故なら print << "END_OF_HTML"; <=ここに空行があるので他にエラーが無ければ一応処理されます <HTML> MSIEならこのままでもHTMLとして表示しますが他のブラウザでは正常に処理されませんので Content-type: text/html\n\n をきちんと出力した方がいいです。 5. 普遍的な設定としてパーミッションは =>( )内は正常に動いた後でお試しください cgiをおくディレクトリ = 755 (可能であれば701にしたほうが良い) .cgiファイル = 755 (可能なら 705 Suexecの場合なら 700にしたほうが良い) データファイル = 666 (可能なら 606 suexecなら600) 6. また .htaccessをおいている場合 その記述が原因でエラーに成る場合もあります これだと .cgi以外にも .txt などそのディレクトリに置いた全てのfileで500エラーに成ります =>httpdのエラーログを見るしかないです 7. その他 http://oshiete1.goo.ne.jp/qa2494121.html http://oshiete1.goo.ne.jp/qa2498909.html
その他の回答 (5)
- umasikajiro
- ベストアンサー率67% (545/803)
1. そのHTML文で こちらのサーバーでは正常に表示されました 2. そのURLの index.htmlは見つからないようですが? 尚、自分のページのURLを投稿すると、削除対象となります(過去数回経験しています)
- umasikajiro
- ベストアンサー率67% (545/803)
いろいろ書くと混乱するようですので、要点のみ、、、 counter.cgiをテキストエディタで開いて END_OF_HTML <=ここでキーボードのEnterキーを押してから上書き保存します それをサーバーにアップしなおしてください。 http://www.gac.jp/article/index.php?stats=question&category=10&id=1623&command=msg
補足
http://green.ribbon.to/~unixmac/counter/counter.cgi できましたがhttp://green.ribbon.to/~unixmac/counter/index.html で表示するとcgiが表示されません <HTML> <HEAD> <TITLE>アクセスカウンタ</TITLE> </HEAD> <FRAMESET rows="*,100" frameborder="no"> <FRAME src="main.html" scrolling="auto"> <FRAME src="counter.cgi" scrolling="no"> </FRAMESET> </HTML> で本の通りにやったんですが
- qtea
- ベストアンサー率77% (38/49)
># print "Content-type: text/html\n\n"; コメントになっているのがエラーの原因だと思います。 CGIは、HTMLを出力する前に Content-type: text/html(改行2つ) が必ず必要です。 そのあたりは、参考にされた書籍に記述があるはずなので、もう一度、最初から読みなおしてはいかがでしょうか。
- inferu_noz
- ベストアンサー率26% (23/86)
?nではなくって、¥nですねー。 書き方が少し古めかしいというような気もしますが、初心者本の最初の頃なら、こんなものか。 ただ、 >webサーバーにアップ というのがもうれつに抗議したいと思います。 特に、初心者は無限ループでサーバに過剰な負荷をかけて、スペースから追放や周りにも迷惑をかけます。 サーバはそこのスペースを使っているユーザーの皆さんのものです。 練習するためには、自分のPCに環境を整えましょう。 それほど難しくはありません。 http://y-kit.jp/saba/xp/apachexp.htm 自分のPCなかに環境を整えれば、winならパーミッションとか気にせず、テストする事ができます。 意外とパーミッションや転送エラーで動かない事が多いので、それをチェックするためにも、自前で整えましょう。
- kiki_s
- ベストアンサー率59% (147/248)
改行コードがおかしくないですか? 「¥n」じゃないでしょうか? (念のため全角で書いていますので、ご注意) それ以外はこれといっておかしな点は見あたらないと思いますが・・・ (あくまで推測です) お使いのwebサーバが分かりませんが、 サポートページなどは無いのでしょうか? パーミッションはwebサーバによって多少変わります。 全てのサーバが同じとは限らないのです。 参考にされているCGIの本も分かりません。 たとえ分かっても内容までは分からないですけどね。 また、書籍に記載されているままで動作するとは限りません。
補足
2. END_OF_HTML に改行が必要です END_OF_HTML <=ここでfileが終わりだとエラー END_OF_HTML <=ここでfileが終わりならOK END_OF_HTML __END__ <=勿論OK、終わりを意味します。スクリプトの終わりにこれを書く癖をつけるとこの手のエラーは無くなります がよくわからないんですが 2. END_OF_HTML に改行が必要です って言うのは END_OF_HTML¥n¥n;って事ですか? 詳しく御願いします