この記事の目的
PHP のグローバル エラー処理は、プロジェクトの開発時に非常に役立ち、開発者が問題を迅速に特定し、作業効率を向上させることができます。デフォルトではグローバルエラーが直接出力されますが、最近開発時に使用したフレームワークライブラリでグローバルエラー処理が設定されているため、出力されないエラーメッセージが多くなり、問題点の特定に時間がかかります。そこで、このライブラリの実装を調べたところ、error_reporting と set_error_handler を設定することがこの現象を引き起こしていることがわかりました。この2つの機能の使い方をメモとして記録しておきます。
背景
PHP には型検出がありません。開発者が間違った単語を入力しやすく、致命的なエラーが発生し、最終的にはスクリプトの実行が停止します。この時にエラーメッセージが出ないと非常に辛いことになります。スクリプトのコードの最初の行からデバッグを開始し、スペルミスの単語が見つかるまでコードの数千行を印刷またはエコーし続ける必要があります。次に、戻って、以前に追加したプリントまたはエコーをすべて削除する必要があります。これは非常に退屈な仕事です。
一般的な状況
通常の状況では、PHP は致命的なエラーを直接出力し、エラーの原因 (ファイル アドレス、行番号) と理由などを出力します。これにより、開発者は問題を簡単に特定できます。
ただし、php.ini 設定やサードパーティのフレームワーク構成の問題により、この情報が出力されない場合があります。このとき、問題を迅速に特定できるように、関連するパラメーターを自分で設定し、これらのエラー メッセージを出力する方法を学ぶ必要があります。
エラー報告
error_reporting は、php.ini 内の php のグローバル構成パラメーターです。エラー出力レベルを設定するために使用されるパラメーターは、エラー出力レベルの設定に使用できるビットです。以下は php.ini からコピーされた情報です。 リーリー
デフォルトでは、PHP は通知を除くすべてのエラーメッセージを出力します。同様に、PHP 標準関数では、同じ名前の関数 error_reporting(int $level) が提供されており、これは PHP スクリプトで同じ関数を完了するために使用されます。これは他のプログラムには影響しません。 $level が 0 の場合、エラー出力はオフになる、つまりエラーは出力されないことに注意してください。
set_error_handler
php のデフォルトのエラー処理はメッセージを出力することです。ただし、他の操作を定義する必要がある場合もあります。その場合は、エラー処理関数をカスタマイズする必要があります。 PHP には、独自のエラー処理関数を登録するのに役立つ組み込み関数 set_error_handler が提供されています。関数のプロトタイプは次のとおりです:mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )
エラー処理関数が登録されていても、デフォルトの動作が実行されることに注意してください。つまり、エラーが発生した場合は引き続きエラーメッセージが出力されるため、表示されるエラーレベルを0に設定する必要がありますプログラム内でエラー処理関数を登録してください。このアプローチは、実稼働環境では特に重要です。これは、何か問題が発生した場合でも、機密の内部エラー情報が潜在的に悪意のあるユーザーに公開されることがないためです。カスタム エラー処理関数は致命的なエラー (コンパイル エラーなど) を処理できないことを指摘することも重要です。以下はカスタムエラー処理関数を使用した例です:
リーリー
このスクリプトを実行すると、次の出力が得られます:リーリー
最後の「new NoExistClass()」例外がカスタム エラー処理関数によってキャッチされなかったことがわかります。最後に、set_Exception_handler はトップレベルの例外処理を登録します。Web アプリケーションでは、これを設定して、一律にエラー処理ページにジャンプできます。 。