ホームページ  >  記事  >  バックエンド開発  >  PHP のさまざまな例外およびエラーのインターセプト方法と、致命的なエラーが発生した場合のアラーム、PHP インターセプト_PHP チュートリアル

PHP のさまざまな例外およびエラーのインターセプト方法と、致命的なエラーが発生した場合のアラーム、PHP インターセプト_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:00:28694ブラウズ

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

http://www.bkjia.com/PHPjc/1093705.html技術記事 PHP のさまざまな例外およびエラーのインターセプト方法と、致命的なエラーが発生した場合のアラーム PHP インターセプトは、開発環境および製品環境でデバッグ モードをオンにして使用されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。