ホームページ > バックエンド開発 > PHPチュートリアル > 「register_shutdown_function()」を使用して致命的な PHP エラー (E_ERROR) をキャッチして処理するにはどうすればよいですか?

「register_shutdown_function()」を使用して致命的な PHP エラー (E_ERROR) をキャッチして処理するにはどうすればよいですか?

DDD
リリース: 2024-12-29 08:02:17
オリジナル
166 人が閲覧しました

How Can I Catch and Handle Fatal PHP Errors (E_ERROR) Using `register_shutdown_function()`?

致命的な (E_ERROR) PHP エラーの捕捉

問題:

set_error_handler() 関数はほとんどの捕捉に効果的ですが、 PHP エラーでは、存在しない関数の呼び出しなどの致命的なエラーを処理できません。このため、開発者はこれらの重大なエラーをキャプチャするための代替方法を模索することになります。

解決策:

PHP 5.2 には、致命的なエラーのキャプチャを可能にする register_shutdown_function() 関数が用意されています。このようなエラーが発生したときにエラー電子メールを送信する実装は次のとおりです。

register_shutdown_function("fatal_handler");

function fatal_handler() {
    $error = error_get_last();  // Obtain last error

    if ($error !== NULL) {
        $errno = $error["type"];
        $errfile = $error["file"];
        $errline = $error["line"];
        $errstr = $error["message"];

        error_mail(format_error($errno, $errstr, $errfile, $errline));
    }
}
ログイン後にコピー

サポート関数:

format_error や error_mail などの必要なサポート関数を定義します。 format_error 関数は、テーブル形式でエラー情報を返すことができます。

function format_error($errno, $errstr, $errfile, $errline) {
    $trace = print_r(debug_backtrace(false), true);
    $content = <<<HTML
    <table>
        <thead><th>Item</th><th>Description</th></thead>
        <tbody>
            <tr><th>Error</th><td><pre class="brush:php;toolbar:false">$errstr
Errno
$errno
File$errfile Line$errline Trace
$trace
HTML; return $content; }
ログイン後にコピー

Swift Mailer ライブラリを使用して error_mail 関数を実装します。

追加リソース:

  • [$php_errormsg](https://www.php.net/manual/en/reserved.variables.errormsg.php)
  • [事前定義済み]定数](https://www.php.net/manual/en/ language.constants.predefine.php)

以上が「register_shutdown_function()」を使用して致命的な PHP エラー (E_ERROR) をキャッチして処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート