2011-12-19 8 views
6

ときどきPHPコードが不正に作成され、500エラーが発生することがあります。私はWindows 7のラップトップでApache 2.2を実行しています。 IDEとして私はPhpStormを使い始めました。PHP 5.3 - トラブルシューティング500エラー - デバッグ - 解析エラー

これらのエラーをキャッチして回線番号を通知する最も良い方法は何ですか。 なぜOOP関連の構文エラーは500個のエラーが発生し、関数の問題は通常のエラーを返す傾向がありますか?

例: 2つのコロンではなく1つのコロンでクラスから静的メソッドを呼び出します。

更新: 受け入れられた回答とすべてのコメントを参照してください。

+0

と、実行時にこのすべてをコントロールすることができますか?コードが構文エラーのために解析できない場合は、Webサーバーから、コンパイルエラーの詳細がログに表示されます(ユーザーの表示には表示されません)。 – David

答えて

12

E_PARSE,E_ERROR、キャッチされていない例外など、致命的なエラーが発生した場合、PHPは "500"で応答します。 500は「内部サーバーエラー」のHTTP応答コードです。要求の処理中に何か回復不能なエラーが発生しました。好ましくE_ALL - - あなたのphp.iniの

、開発マシン上で、あなたは(少なくとも) E_NOTICEにご error_reportingレベルを設定しなければならないと display_errorsがオンになっていることを確認してください。これにより、ブラウザに「500」エラーを含むエラーメッセージが表示されます。

また、Apacheエラーログを確認することもできます。エラーは、log_errorsがphp.iniで有効になっている限り表示されます。デフォルトでは、これは<apache_ServerRoot>\logs\error.logになります。

また、私はあなたが「正常なエラー」で何を意味するかわからないんだけどini_set()error_reporting()

+0

その静的状況はE_PARSEエラーでなければなりません。問題を見つけるのはとても難しかった - 私は良い方法があると思っていた。 – BuddyJoe

+0

error_reportingがオンになっています。 +1とタイムゾーンが設定されています。 – BuddyJoe

+0

@brunot 'error_reporting'がオンのメッセージが表示されない場合、' display_errors'はオフです。エラーメッセージが出力されない状況がありますが、これは実際にPHPが内部的に非常に間違ってクラッシュした場合にのみ発生します。このような状況が発生すると、通常、Apacheログには、デバッグ*が発生した理由が実際には非常に困難な場合があるというメッセージが表示されます。このような状況では、コマンドラインから*のスクリプトを実行すると、便利なエラーメッセージが表示されますが、必ずしもそうとは限りません。 – DaveRandom