内部サーバーエラー(500)を返すPHPアプリケーションがあるときに問題が発生していますが、エラーログに何も表示されません。
今、私は実行しようとしているものにエラーがあることを知っています。いくつかのファイルが欠落していることを知っていますが、Apacheエラーログに何かが表示されるはずです(そうでなければ、私が欠落しているものを正確に知るはずです)。
私はテストスクリプトを作成しましたが、同じvhost設定の下でエラーが発生し、それらのエラーはうまく表示されますので、php/Apacheまではすべて設定されているようです。エラーログに表示される特定のphpエラーはありますか(phpは、通知、警告、エラー、致命的なエラーなどを表示するように構成されています)?
これは、apt-getを使用したubuntuリポジトリからの標準Apacheおよびphpを使用して、ubuntut 10.04で実行されます。
ソースファイルをスキャンして@
を見つけます。
現在、「@」エラー制御演算子のプレフィックスは、スクリプトの実行を終了させる重大なエラーのエラー報告も無効にします。とりわけ、これは、「@」を使用して特定の関数からのエラーを抑制し、それが利用できないか、タイプミスされた場合、その理由を示すことなくスクリプトがすぐに終了することを意味します。
多分何かがエラー出力をオフにします。 (他のスクリプトがエラーログにエラーを適切に出力していると言っていることを理解していますか?)
スクリプトの終了場所を判断することで、スクリプトのデバッグを開始できます(echo 1; exit;
をスクリプトの最初の行に追加し、ブラウザが1
そして、その行を下に移動します)。
以下をコピーして新しい.htaccess
ファイルに貼り付け、Webサイトのルートフォルダーに配置します。
php_flag display_errors on
php_flag display_startup_errors on
エラーはページに直接表示されます。
これは迅速にデバッグする最良の方法ですが、セキュリティ違反になる可能性があるため、長時間使用しないでくださいです。
過去には、2つのケースでエラーログがありませんでした。
php_error_log
ファイルを変更する権限がありませんでした。.htaccess
の不適切な構成が原因でエラー500が発生しました。この状況では、エラーはApache error_log
ファイルに記録されます。Symfonyプロジェクトの場合、プロジェクトのアプリ/ログのファイルを必ず確認してください
この投稿で利用可能な詳細:
Symfony 2で500エラーをデバッグする方法
ところで、他のフレームワークまたはCMSはこのような動作を共有します。
私に起こった別のケースは、いくつかのページにCURLを実行し、すべてのエラー報告を有効にしても、内部サーバーエラーが発生し、Apacheログに何も記録されなかったことです。
私の問題は、CURLでcurl_setopt($CR, CURLOPT_FAILONERROR, true);
を設定したことです
エラーはありましたが、エラーは表示されませんでしたが、これはエラーがPHP 1ではなくフレームワークレベルであったため、ログに表示されなかったためです。
エラーが表示されない別の理由は次のとおりです。
同じ問題がありました。私の場合、本番環境からソースをコピーしました。したがって、index.php
で定義されたENVIRONMENT
変数は'production'
に設定されました。これにより、error_reporting
が0(ロギングなし)に設定されました。 'development'
に設定するだけで、Apacheログにエラーメッセージが表示されるようになります。
500は、データベース構成にセミコロンがないためでした:-)
ファイルの許可が正しいことを確認してください。 Apacheにファイルを読み取る権限がない場合、ログに書き込むことはできません。
それでも500エラーがあり、ログがない場合は、コマンドラインから実行してみてください。
php -f file.php
ブラウザー(サーバーから)の場合とまったく同じようには機能しませんが、コードに構文エラーがある場合は、コンソールにエラーメッセージが表示されます。
PHPエラーログを有効にする必要があります。
これは、PHPエラーが発生したときにWebサーバーでランダムな不具合が発生するためです。500内部エラーがスローされます(同じ問題があります)。
PHPエラーログを見ると、解決策が見つかります。