ホームページ > バックエンド開発 > PHPチュートリアル > さまざまな PHP 例外やエラーを傍受し、致命的なエラーが発生した場合に警告を発します。PHP は問題が発生する前に予防措置を講じます。PHP チュートリアル。

さまざまな PHP 例外やエラーを傍受し、致命的なエラーが発生した場合に警告を発します。PHP は問題が発生する前に予防措置を講じます。PHP チュートリアル。

WBOY
リリース: 2016-07-12 09:00:32
オリジナル
1140 人が閲覧しました

さまざまな 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_WARNINGE_COMPILE_ERROR、 E_COMPILE_WARNING, 这个可以在官方文档中看到,但是本处无妨,因为以上错误是解析、编译错误,这些都没有通过,你是不可能发布上线的上記のコードは厳密にテストされ、オンライン環境に適用されています。必要に応じて変更できます。

http://www.bkjia.com/PHPjc/1093103.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/1093103.html技術記事 PHP のさまざまな例外やエラーをインターセプトし、致命的なエラーが発生した場合は警告を発して、すべての問題を発生前に防止します。ほとんどの人のアプローチは、開発環境でのデバッグを有効にすることです。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート