03/16(Sun) 02:45
■ サーバエラーと対処法
CGIの設置や改造をしてるとよく出くわすトラブルとその対処法です。エラーメッセージから考えられる原因を推測し、その対処法をまとめました。あなたのCGIの改造にお役に立てれば幸いです。
■ サーバーから返される主なエラーメッセージには下記のものがあります。
エラーメッセージ | 考えられる原因と対処法 |
500 Internal Server Error |
・スクリプト1行目のPerlのパスは正しいですか
・転送モードは正しいですか。CGIはテキストモードで転送してますか
・CGIファイルやディレクトリのパーミッションの設定は正しいですか
(正しく設定しないとプロバイダによってはサーバーエラーになります)
・設定を変更する際に文法ミスをしてはいないですか
(編集した箇所をよく見直してください。『'』がひとつ足りないだけでもエラーになります)
・jcode.plへのパスが正しいか見直しましょう
・.htaccessの書式に問題がある
・必要ファイルがすべてアップロード出来ているか確認して下さい
(混雑した時間帯などの時は途中で終了している場合などがあります)
・CGIが正しく動作していない(CGIプログラム内のエラー)
・改行コード(LFのみ)または漢字コードがただしくない
・サーバーに独自の制限はないかよく調べましょう
|
404 Not Found |
・URLの指定に問題がある(リンクミス、全角/半角、大文字/小文字、日本語など)
・リクエストしたURLが存在しない
・プロバイダによってはCGIのみ別サーバーになっている
|
403 Forbidden |
・パーミッションの設定に問題がある(意図したパーミッションではない等)
・.htaccessによるアクセス制限がかかっている
・プロバイダによってはcgi-binなど、特定のディレクトリに設置しなければならないこともあります
|
プログラムがそのまま表示される |
・サーバーがCGIファイルを認識できていない状態です
・プロバイダがCGIをサポートしていない
・htaccess ファイルの設定ミスまたは.htaccess がない(プロバイダに確認)
・perlのパス指定ミス
|
■ CGIから返されるエラーメッセージの例です。CGIにより「オープンできません」「見つかりません」等違いがあります。
このメッセージの場合は、サーバがCGI実行中にエラーが起きたことを意味します。文法エラーは解決されてると判断できます。
エラーメッセージ | 考えられる原因と対処法 |
『ログファイルを読み出せません』 と表示される |
・CGIがログファイルを読み出せない状態です
・ファイルがアップロードされているか、ファイル名やパスが間違っていないか
・パーミッションは666に設定されているか、チェックしてください
|
『ロックファイルが作成できません』 と表示される |
・ログの破損防止のためのロックファイルをCGIが作成できない状態です
・ロックファイルを作成するディレクトリのパーミッションを777に変更してください
(プロバイダによっては755などに設定しなければならないこともあります)
|
表示される日時がずれている |
・海外にサーバーがある場合など、日時がずれて表示されることがあります
・CGIの設定部に海外サーバー時差補正用パラメータがあればそれを修正します
・ない場合は、エディタで『localtime』を検索し時差補正をします
|
■ エラーの詳細情報を見るには
Internal Server Error といわれても何がなんだかわかりません。Internal Server Errorは非常に原因を特定するのが難しいエラーです。このエラーが出たときは、perlのパス指定の次の行(2行目以降)に次のものを加えるとエラー情報の詳細を表示することができます。1つずつエラーを解決していきましょう。
#!/usr/bin/perl
# エラー情報の詳細表示
BEGIN{
$| = 1;
print "Content-type: text/html\n\n";
open(STDERR, ">&STDOUT");
}
|
■ jcode.plへのパスを間違えてる(./jcode.plを../jcode.plと間違えて指定)場合のエラーメッセージのサンプルです。
Can't locate ../jcode.pl at C:\www\tkiku\bbs\bbs.cgi line 35.
|
最後の bbs.cgi line 35. に注目します。
つまりbbs.cgiの35行目の ../jcode.pl が見つからなかった(Can't locate)ということがわかります。 jcode.plのパス指定をチェックします。
■ 文末区切り記号の「;」を忘れた(./jcode.pl;を./jcode.plと記述)場合のエラーメッセージのサンプルです。
Scalar found where operator expected at C:\www\tkiku\bbs\bbs.cgi line 36,
near "$url" (Missing semicolon on previous line?) syntax error.
|
最後の bbs.cgi line 36, near "$url" に注目します。
この場合は bbs.cgiの35行目に ; がないため36行目の"$url"が文法エラーとなり(Missing semicolon on previous line?)と「前行のセミコロンを忘れてませんか?」とエラーメッセージがでます。
|