2

次のスクリプトが与えられた場合

<?php

ini_set('display_errors','On');
error_reporting(E_ALL);

thisisanerror

?>

私は期待される

Notice: Use of undefined constant error - assumed 'error' in /htdocs/test.php on line 8

しかし、スクリプトに何かを追加すると

<?php

ini_set('display_errors','On');
error_reporting(E_ALL);

error

function test () {

    echo('test');

}

?>

私は得る

HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.

後者の場合、通常の構文エラーではなく 500 エラーが発生するのはなぜですか? display_errors は常にエラーを表示すべきではありませんか?

4

2 に答える 2

7

2 番目のコード サンプルは、完全な構文エラーです。これは、PHP がコード実行の時点まで進行せず、解析時に終了することを意味します。コードが実行されないため、ini_set()呼び出しの影響は見られず、問題を示す PHP テキスト エラーは表示されません。

解析エラーは致命的であり、Web サーバーは (正しく) 500 応答コードで PHP の致命的なエラーを処理するように設定されています。PHP スクリプトは出力を生成しなかったため、Web サーバーは 500 条件のデフォルトのエラー ドキュメントを返します。

ブラウザーで解析エラーのテキスト メッセージを表示したい場合 (本番環境では通常これを行うことはありません)、php.ini または .htaccess ファイルを使用してエラー レポートをオンにする必要があります。

于 2012-05-19T21:57:29.723 に答える
2

php が実行時にエラーを表示するように強制してもうまくいかない場合は、代わりに php.ini で設定するなどの他のオプションを試すことができます。

error_reporting = E_ALL | E_STRICT
display_errors: On

幸運を!

于 2012-05-19T21:48:21.767 に答える