CGIエラー特定の方法

CGI スクリプトの文法チェックをしたのに、なぜ Internal Server Error となるんだと不思議に思うでしょう。実は、perl の文法上、問題なくても、CGI (HTTP) の規定に反しているとエラーが出るのです。この場合、perl のデバッガでは発見できません。

では、CGI の規定に反しているかどうかのチェック方法は、どうするのでしょうか。それは、apache のエラーログを見るのです。apache の設定がデフォルトであれば、C:\Program Files\Apache Group\Apache\logs\error.log が、apache のエラーログとなりますので、それをテキストエディターで開いてみてください。直近のエラーは、ログの最後に出力されています。

[Sun Nov 04 13:27:17 2001] [error] [client 127.0.0.1] malformed header from script. Bad header=aaa: c:/program files/apache group/apache/cgi-bin/test.cgi

のように出力されます。malformed header from script. Bad header=aaa の部分がエラー内容です。このエラーは、

print "aaa";

とだけ書かれた CGI スクリプトを実行して出力させたエラーです。本来であれば、

print "Content-Type: text/html\n\n";
print "aaa";

のように、HTTP ヘッダーを加えなければいけません。Windows 版 Apache の場合、文字化けしますので、HTTP ヘッダーは、

print "Content-type: text/html; charset=Shift_JIS\n\n";

の方がよろしいかと思います。ヘッダーを出力していても、スペルミスなどがあれば、同様のエラーが出力されますので、ご注意下さい。

実は、このエラーログには、perl の文法エラーも出力されます。その出力内容は、perl のデバッガと同じものです。perl デバッガでのチェックをしていなかったとしても、apache のエラーログで確認することも可能なのです。

次に、Windows 版 Apache と、Unix 版 Apache での CGI セットアップの違いを説明します。実際にサーバにアップする際に、気をつけなければいけない点を挙げております。