web-dev-qa-db-ja.com

PHPは500エラーを返しますが、エラーログはありません

内部サーバーエラー(500)を返すPHPアプリケーションがあるときに問題が発生していますが、エラーログに何も表示されません。

今、私は実行しようとしているものにエラーがあることを知っています。いくつかのファイルが欠落していることを知っていますが、Apacheエラーログに何かが表示されるはずです(そうでなければ、私が欠落しているものを正確に知るはずです)。

私はテストスクリプトを作成しましたが、同じvhost設定の下でエラーが発生し、それらのエラーはうまく表示されますので、php/Apacheまではすべて設定されているようです。エラーログに表示される特定のphpエラーはありますか(phpは、通知、警告、エラー、致命的なエラーなどを表示するように構成されています)?

これは、apt-getを使用したubuntuリポジトリからの標準Apacheおよびphpを使用して、ubuntut 10.04で実行されます。

52
ryanzec

ソースファイルをスキャンして@を見つけます。

PHPドキュメントサイトから

現在、「@」エラー制御演算子のプレフィックスは、スクリプトの実行を終了させる重大なエラーのエラー報告も無効にします。とりわけ、これは、「@」を使用して特定の関数からのエラーを抑制し、それが利用できないか、タイプミスされた場合、その理由を示すことなくスクリプトがすぐに終了することを意味します。

51
Luc M

多分何かがエラー出力をオフにします。 (他のスクリプトがエラーログにエラーを適切に出力していると言っていることを理解していますか?)

スクリプトの終了場所を判断することで、スクリプトのデバッグを開始できます(echo 1; exit;をスクリプトの最初の行に追加し、ブラウザが1そして、その行を下に移動します)。

6
akirk

以下をコピーして新しい.htaccessファイルに貼り付け、Webサイトのルートフォルダーに配置します。

php_flag  display_errors                  on
php_flag  display_startup_errors          on

エラーはページに直接表示されます。

これは迅速にデバッグする最良の方法ですが、セキュリティ違反になる可能性があるため、長時間使用しないでくださいです。

6
Meloman

過去には、2つのケースでエラーログがありませんでした。

  1. Apacheを実行していたユーザーには、php_error_logファイルを変更する権限がありませんでした。
  2. 誤った書き換えモジュール設定など、.htaccessの不適切な構成が原因でエラー500が発生しました。この状況では、エラーはApache error_logファイルに記録されます。
5
sgnsajgon

Symfonyプロジェクトの場合、プロジェクトのアプリ/ログのファイルを必ず確認してください

この投稿で利用可能な詳細:
Symfony 2で500エラーをデバッグする方法

ところで、他のフレームワークまたはCMSはこのような動作を共有します。

3
Balmipour

私に起こった別のケースは、いくつかのページにCURLを実行し、すべてのエラー報告を有効にしても、内部サーバーエラーが発生し、Apacheログに何も記録されなかったことです。

私の問題は、CURLでcurl_setopt($CR, CURLOPT_FAILONERROR, true);を設定したことです

エラーはありましたが、エラーは表示されませんでしたが、これはエラーがPHP 1ではなくフレームワークレベルであったため、ログに表示されなかったためです。

2
eric.itzhak

エラーが表示されない別の理由は次のとおりです。

同じ問題がありました。私の場合、本番環境からソースをコピーしました。したがって、index.phpで定義されたENVIRONMENT変数は'production'に設定されました。これにより、error_reportingが0(ロギングなし)に設定されました。 'development'に設定するだけで、Apacheログにエラーメッセージが表示されるようになります。

500は、データベース構成にセミコロンがないためでした:-)

2
Aswin Kumar

ファイルの許可が正しいことを確認してください。 Apacheにファイルを読み取る権限がない場合、ログに書き込むことはできません。

0
Johnny Ruin

それでも500エラーがあり、ログがない場合は、コマンドラインから実行してみてください。

php -f file.php

ブラウザー(サーバーから)の場合とまったく同じようには機能しませんが、コードに構文エラーがある場合は、コンソールにエラーメッセージが表示されます。

0
jcubic

PHPエラーログを有効にする必要があります。

これは、PHPエラーが発生したときにWebサーバーでランダムな不具合が発生するためです。500内部エラーがスローされます(同じ問題があります)。

PHPエラーログを見ると、解決策が見つかります。

php.iniで有効にする方法については、ドキュメントのこちらをご覧ください

0
Neal