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