アップデート:
この回答のコメントの@mpcによると、オンの場合、エラーはブラウザに表示されますがdisplay_errors
、ログには表示されません。エラーがまったく出てこないと思っていました。
ログに表示されないのはエラーだけですかE_NOTICE
、それともすべてのエラータイプが影響を受けますか?すべてのエラータイプの場合、最初に確認するのは、エラーログが有効になっているかどうかです。ini_set('log_errors', 'On');
スクリプトの上部で設定してみてください。それでも問題が解決しない場合は、を呼び出してサーバーが確実ini_set('error_log', 'your_file_path');
に書き込むことができるものにログファイルを設定してみてください。これらのどちらも機能しない場合は、PHPのインストールに深刻な問題があると思います。これらの修正のいずれかがphp.ini
機能する場合、アクセスできる場合はそれらを実際に配置できます。
元の回答:
質問のレベルに基づいて、エラーerror_reporting
を報告するようにPHPインストールがすでに設定されている必要があります。E_NOTICE
これらのエラーをログに記録していない場合は、何かが間違っています。エラーが表示されるdisplay_errors
かどうかを確認するためにオンにすることをお勧めします。ファイルをE_NOTICE
変更できない場合は、スクリプトの先頭で実行してみてください。明らかに、これらのエラーは、トリガーした場合にのみ表示および/またはログに記録されるため、実際にどこかでそれを行っていることを再確認する必要があります。php.ini
ini_set('display_errors', 'On');
注意点の1つは、E_DEPRECATED
エラーレベルがPHP5.3でのみ導入されたことです。E_DEPRECATED
PHP 5.2インストールで設定をテストしたところ、PHPはエラーで応答し、error_reporting
レベルをに設定しました。これは、エラーがまったく0
報告されないことを意味します。5.3より前のファイルでこの設定を使用することは意味がありませんが、少なくともそれをサポートしていないサーバーで使用している可能性を高めることが重要だと思います。バージョンがわからない場合は、実行すると、インストールのバージョン番号など、多くの情報が記載されたページが表示されます。php.ini
E_DEPRECATED
phpinfo()
上記にもかかわらず、私があなたの質問を誤解し、独自のカスタムロギングを作成することだけを話している場合は、エラーが発生したときに実行する関数を作成し、その関数を使用してエラーハンドラーとして割り当てる必要がありset_error_handler()
ます。
set_error_handler()
を使用する場合、PHPのデフォルトのエラーハンドラを完全にバイパスすることに注意することが重要です。これはあなたのerror_handler
レベルが無意味になることを意味します。重大度に関係なく、すべてのエラーは、作成したエラーハンドラー関数に渡されます。E_xxx
PHPによってこの関数に渡される最初のパラメーターは、検出されたエラーの定数の数値であるエラー番号になります。必要なエラーのみをキャッチするカスタムコードを作成する必要があります。
たとえば、エラーのみ E_NOTICE
をキャッチするには、関数は次のようになります。
function my_error_handler($errno, $errstr, $errfile, $errline) {
if ($errno == E_NOTICE) {
// handle/log the error
}
}
set_error_handler("my_error_handler");