吉田さん、
わかってよかったです。まあ確かに拍子抜けしましたが、hello とか test とかいうのはいろいろなディレクトリに作ったりするのでありがちなことですね。
ありがとうございました。解決いたしました。
★中田さんのアドバイス
「ちょっと気分を変えて $\ は使わず別の名前の test.cgi とかを作ってやってみるというのはどうでしょうか。」が効きました。その結果
Error 404
見つかりません。 - CGIスクリプトまたはプログラムがありません : C:\Program Files\HTTPD\cgi-bin\test.cgi
がびーん!これはなんだぁ!
どうやら、何日も悩んでいる間にエイリアスの設定をデフォルトに戻していたようです。
つまり、仮想パス /cgi-bin のローカルパスを C:\Program Files\HTTPD\cgi-bin に戻していたのを忘れていたようです。(戻したという意識は今もって全くない)
元々はprint文による最後の文字付加の組み込み変数を勘違いして $/ = "\n"; と違う組み込み変数にする間違いをしていたのです。そのプログラムが C:\Program Files\HTTPD\cgi-bin にあった。で、エラーとなった。デバッグの過程で、ローカルパスを変える等の環境を整えている間に、httpdの設定変更を把握できなくなったということです。
C:\Program Files\HTTPD\cgi-bin\hello.cgiを読みに行っていることに気が付かず、E:\HTTPD\cgi-bin\hello.cgiをいくら直してもダメですよね。
あまりに、アホなミスで皆様の参考にならず、申し訳ありません。質問をアップしたときには FAQ にもない、珍しい例だと張り切っていたんです(赤面)。
★ 浩介さん
「この場合のヘッダとボディというのは<head>と<body>という意味ではなく、 HTTPヘッダとHTML部分ということです。」とのアドバイスありがとうございます。プログラム中のprint "<HR>";を半角のまま掲示板に書き込むと横線に変換されることに気が付かないほどの知識レベルです。一つ賢くなりました。
★ あれ?前回質問を書き込んだときは<HR>が横線に展開されて、冷や汗をかいたのに、これを書き込む前に確かめたら<HR>が展開されていない。昨日見たのは幻だったのか?
吉田さん、
これは不思議(で面白い)ですね。
$\ = "\n"; が効いていないとも思えませんし。。。
私もスクリプトをコピー&ペーストしてやってみましたがちゃんと動作しました(Win95/NT で perl.exe/PerlIS.dll)。
あとは hello.cgi が実は別のファイルであるとか、Perlがおかしいか(バージョンは何でしょう?)、くらいしか思いつきません。。。
ちょっと気分を変えて $\ は使わず別の名前の test.cgi とかを作ってやってみるというのはどうでしょうか。
吉田さん
perlのprint文は"\n"を明示的に書いてやらないと改行してくれません。
print "Content-Type: text/html\n";
print "\n";
が正解。
この場合のヘッダとボディというのは<head>と<body>という意味ではなく、
HTTPヘッダとHTML部分ということです。
はじめまして。CGIの練習にhttpdを使わせていただいています。最初の
プログラム Hello, world! を表示するものですが、文字列は表示されるもののエラー
が出ます。自力で解決しようとFAQを読むなどしたのですが、解決できず、煮
詰まってしまいました。アドバイスをお願いします。
★errors.log の内容は
Wed Mar 15 18:22:11 2000 Error Response 500 Thread 0(ID= -219021) for "/cgi-bin/hello.cgi"
となってます。
★画面は以下のような表示となってます(空行をカット)
Error 500
CGI エラー - ヘッダとボディの区切りの空行 が見つかりません。
CGI 出力メッセージ:
Content-type: text/html
------------------------------------------------------------------------
Hello, world!
------------------------------------------------------------------------
------------------------------------------------------------------------
AnWeb/1.24
★CGIスクリプトは以下のとおりです。
#!/usr/local/bin/perl
# hello.cgi
$\ = "\n";
print "Content-type: text/html";
print "";
print "<HTML>";
print "<HEAD>";
print "<TITLE>Show Hello, world!</TITLE>";
print "</HEAD>";
print ""; #エラーが出たのでこれを追加してみたがダメ
print "<BODY>";
print "<HR>";
print "Hello, world!";
print "<HR>";
print "</BODY>";
print "</HTML>";
★最後にブラウザは IE 3.02 です。古い機械を使っているもので古いブラウザ
でお恥ずかしい限りです。ソフトウェアのバージョンアップでは痛い目に遭っ
ているので、なるべくバージョンアップをしないことを信条としています。