PHP のさまざまな例外およびエラーのインターセプト方法と、致命的なエラーが発生した場合のアラーム、PHP インターセプト
日常の開発では、ほとんどの人のアプローチは、開発環境ではデバッグ モードをオンにし、運用環境ではデバッグ モードをオフにすることです。開発中にさまざまなエラーや例外を確認できますが、オンラインではエラー表示をオフにします。
上記の状況は非常に科学的であるように見えますが、非常に安全であると説明する人もいれば、重要な情報が漏洩しないようにエラーが見えない人もいます...
しかし、オフラインでは正常に動作するのに、オンラインになると動作せず、原因が見つからないという状況に遭遇したことはありませんか?
スクリプトは長い間問題なく実行されていましたが、ある日突然停止し、その後何らかの理由で記録がなくなりました...
他の人は明らかに支払いましたが、私たちはそれを自分で実験してみるのは良いことです...
上記のすべては、誰もがエラー メッセージをオフにし、エラーや例外をログに記録しなかったため、ランダムに発生するエラーを追跡することが困難になったためです。これにより、エラーが表示されないだけでなく、エラーが追跡されるという矛盾が生じます。これはどのように実現されるのでしょうか。
上記の問題は、PHP のエラーおよび例外メカニズムとその組み込み関数 'set_Exception_handler'、'set_error_handler'、'register_shutdown_function' によって解決できます
「set_Exception_handler」関数は、さまざまなキャッチされなかった例外をインターセプトし、それらを処理のためにユーザー定義のメソッドに渡すために使用されます
「set_error_handler」関数はさまざまなエラーをインターセプトし、ユーザー定義の方法でそれらを処理できます
「register_shutdown_function」関数は、PHP スクリプトの最後に呼び出される関数で、「error_get_last」と一緒に使用して、最後の致命的なエラーを取得します
。
このアイデアは、一般に、エラー、例外、および致命的なエラーをインターセプトし、それらの処理をカスタム メソッドに任せることです。これらのエラーや例外が致命的なものである場合は、それらをデータベースまたはファイル システムに記録し、スクリプトを使用します。処理を続行するには、これらのログをスキャンし、重大なエラーが見つかった場合は、すぐに電子メールまたはテキスト メッセージを送信して警察に通報します
まず、エラーと例外をインターセプトし、独自に定義した処理メソッドで処理するために使用されるエラーインターセプトクラスを定義します。このクラスは「errorHandler.class.php」という名前のファイルに配置され、コードは次のとおりです。
リーリー
上記のコードには、ファイル「errorHandlerException.class.php」に配置されている「errorHandlerException」クラスがあります。このクラスは、ファイル、行番号、エラーコードを記録するためにエラーを例外に変換するために使用されます。エラーが発生したエラーの情報とそのメソッド「isFatalError」を使用して、エラーが致命的なエラーであるかどうかを識別します。ここでは、管理の便宜のためにエラーに番号を付け、名前を付けます。このクラスのコードは以下の通りです
リーリー
エラーインターセプトクラスでは、ユーザーはエラーを記録するための独自のメソッド (「logException」) を定義する必要があります。ここで、一部のエラーは一定期間にわたって継続的に発生する可能性があるため、記録する必要があるのは 1 回だけであることに注意してください。エラー コード、ファイル、行番号、およびエラーの詳細を使用して、エラーが記録されたかどうかを記録するための MD5 値を生成できます。指定された時間 (1 時間) 以内に記録された場合は、再度記録する必要はありません。
次に、上記のクラスをインスタンス化し、さまざまなエラーと例外をキャプチャするファイルを定義します。このファイルの名前は「registerErrorHandler.php」で、内容は次のとおりです。
リーリー
残りは、このファイルをエントリ ファイルに導入し、デバッグ モードを定義し、エラーを記録する独自の方法を実装する必要があります
登録前に発生し、スクリプトの中断を引き起こした一部のエラーは、この時点では「registerErrorHandler::register()」がまだ実行されておらず中断されているため、記録できないことに注意してください
また、「set_error_handler」関数は次のタイプのエラーをキャプチャできません: E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING これは公式ドキュメントに記載されていますが、上記のエラーは次のとおりであるため、ここでは問題ありません。解析エラーとコンパイルエラーが発生した場合、オンラインで公開することはできません
興味があるかもしれない記事:
PHPエラーレベルの設定方法
PHPエラープロンプトを閉じる方法の詳細な説明
- PHPクラス内のさまざまなインターセプターの使用分析
- PHPインターセプターインスタンス分析
- PHPを変更するWordPress でスパムコメントをブロックできるようにするスクリプトの例
-
-
http://www.bkjia.com/PHPjc/1093705.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/1093705.html技術記事 PHP のさまざまな例外およびエラーのインターセプト方法と、致命的なエラーが発生した場合のアラーム PHP インターセプトは、開発環境および製品環境でデバッグ モードをオンにして使用されます。