パソコンのブラウザで、こんなエラーメッセージが出て来ました。
スマートフォンでも同じエラーが発生します。
500 Internal Server Error
この意味や原因は何でしょうか?解決策、対処方法はあるのでしょうか?
目次
500 Internal Server Error (サーバー内部エラー) とは?意味と原因
500は、HTTPのステータスコードの一つであり、CGIとして動作させているプログラムに文法エラーがあったり、設定に誤りがあった場合などに返されます。
HTTPのステータスコードの500番台、5xx系はサーバー側のエラーで使われます。
500 Internal Server Errorの解決策
これはサーバー側のエラーなので、クライアント側では何も出来ません。
つまり、ユーザー側で対処方法とか解決方法はありません。
500はサーバー側の原因なのでサーバー側で原因を調べてみます。
例えば、こんなミスが考えられます。
- .htaccess に php_falg, php_value を使用している
- 指定されたページの CGI が異常終了
- 指定されたページの CGI のパーミッション間違い
- 指定されたページの CGI が間違ったモードで転送されている
- 転送モードを間違えている
- 命令文の終わりの 「 ; 」 が抜けている
詳細に見てみましょう。
PHPが原因の場合
php.iniファイルの、error_reporting、display_errors、 display_startup_errors設定をチェックしてみてください。
それぞれ、E_ALL と"On"にセットされている必要があります。
公開用のサーバーでは上記の設定を変更させてweb上にエラー内容を表示させるべきではありません。
管理者だけがエラーを確認出来るように、log_errorsを使用するべきです。
もし、一部のスクリプトで一時的にエラーを確認したい場合には、下記のコードをスクリプトの冒頭に配置すると良いでしょう。
1 2 |
error_reporting(E_ALL); ini_set('display_errors', 'On'); |
上記を設定してサーバーを再起動します。
CGIが原因の場合
CGIが動作しない原因と解決策は次の通りです。
CGIが動作するディレクトリ内に設置されていない
独自CGIを動作させることができるサーバーと出来ないサーバーがあり、CGIを動作させることが出来るディレクトリも予めサーバーで設定されています。
CGIを実行することが出来ないディレクトリにCGIファイルを設置しても動作させることは出来ません。
このケースの場合、独自CGIが動作し、CGIを動作させることが出来るディレクトリにFTPで転送する必要があります。
Perlへのパスに誤りがある
各CGIファイルの1行目にPerlへのパスが記述されています。
このPerlへのパス「#!/usr/bin/perl」などはサーバーによって決まっていますので、サーバー
管理者から指定されたパス以外では動作しません。
このケースの場合、動作しなかったCGIファイルをWindowsのメモ帳で開き、Perlのパスを確認します。
パスの誤りを修正し、上書き、FTPでサーバーに転送します。
パーミッション(アクセス権)の設定に誤りがある
アクセス権はサーバー環境とCGIの動作によって異なります。
CGI配布サイトやサーバーの説明ページなどにアクセス権が書かれていますが、必ずしもそのアクセス権で動作するものではございません。
また、CGIはデータファイルへ書き込む場合が多く、データファイルやディレクトリのアクセス権にも注意が必要です。ディレクトリは、CGIが使用しているディレクトリとCGI全体が入っているディレクトリの設定がありますので、全体のディレクトリにもご注意願います。
このケースの場合、以下のアクセス権で動作しますので、アクセス権を変更して動作を確認します。
CGIファイル(拡張子が「.cgi」のファイル)・・・700、755
データファイル(拡張子「.dat」「.csv」など)・・・600、644、646
ディレクトリ(サーバー内のフォルダ)・・・755、757、777
ディレクトリ構造に誤りがある
CGIファイルやデータファイルのディレクトリ構造に誤りがある場合、CGIファイルはデータファイルが読めなくなり、エラーになります。
このケースの場合、CGIの作者が指定したディレクトリ構造に合わせて設置します。
FTPの転送モード
CGIやデータファイルはテキストモード(アスキーモード)で、GIFやJPEGなどの画像ファイルはバイナリモードで転送する必要があります。
FTPソフトには自動判定の機能が付いている場合、自動で転送すれば問題ありませんが「バイナリモードで転送」などのボタンを押して転送した場合、CGIファイルがバイナリモードで送信され、実行出来なくなってしまいます。
WordPressで500エラーが発生する場合
WordPressの場合、.htaccess ファイルのコードの記述に問題があると、サーバーエラー500を引き起こす場合があります。
.htaccessを見直してみてください。
Ajaxで500エラーが発生する場合
AjaxでPOST処理で、500 (Internal Server Error)と表示さる場合、js側ではなくサーバープログラムが間違っています。
IIS (Internet Information Services) の設定が原因の場合
IISが原因の場合、下記の原因が考えられます。
PHPで500エラー
PHPで500エラーが出た場合は、以下を参考にしてください。
コメント
[…] […]
[…] […]
[…] […]
[…] […]
[…] […]