私のプロジェクトでは、すべての PHP エラーをキャッチするために、次のようにエラー処理メカニズムを設定しました。
- ファイル内のすべてをオーバーライドするファイルに設定 し
error_reporting()
ましたindex.php
php.ini
system/codeigniter/CodeIgniter.php
エラー ハンドラがusing に設定されてset_error_handler
います - このエラー ハンドラ は_exception_handler
、system/codeigniter/Common.php
_exception_handler
関数はエラーを無視し、重大度が関数で 指定されたものである場合、例外システム ライブラリから関数E_STRICT
を呼び出し、 ファイルに設定した内容に従ってエラーをログに記録します。show_php_error
error_reporting()
index.php
config.php
FALSE
この PHP がエラーの処理を続行した後、ハンドラーはそう返しますが、通常はerror_reporting
レベルとdisplay_errors
設定に応じます。
私を困惑させているのは、E_ERROR
エラー、つまり致命的なエラーがまったく検出されていないように見えることです_exception_handler
。呼び出されていないだけshow_php_error
でなく、関数が呼び出されていないようです。show_php_error
これは明らかに問題です。これは、それらが処理またはログに記録されないことを意味するためです。たとえば、意図的$this->load->views('foo');
にコントローラーをタイプミスした場合、ハンドラーは呼び出されません。
エラー処理に関する提案は大歓迎です、ありがとう!