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

register_shutdown_function を使用して致命的な PHP エラーを検出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-22 19:41:15317ブラウズ

How Can I Catch Fatal PHP Errors Using register_shutdown_function?

シャットダウン関数の登録による PHP 致命的エラーの捕捉

問題:
set_error_handler() が処理できる間ほとんどの PHP エラーでは、致命的なエラー (E_ERROR) をキャプチャできません。存在しない関数の呼び出しによって引き起こされるエラーなど。

解決策:
PHP 5.2 では、致命的なエラーをログに記録できる register_shutdown_function が導入されています。

register_shutdown_function("fatal_handler");

function fatal_handler() {
    // Capture error information
    $error = error_get_last();
    if ($error) {
        error_mail(format_error(
            $error["type"], $error["message"], $error["file"], $error["line"]
        ));
    }
}

定義エラーをフォーマットする format_error 関数情報:

function format_error($errno, $errstr, $errfile, $errline) {
    // Generate the error trace
    $trace = print_r(debug_backtrace(false), true);
    
    // Format the error information
    $content = <<<HTML
    <table border="1">
        <thead>
            <th>Item</th>
            <th>Description</th>
        <thead>
        <tbody>
            <tr>
                <td>Error</td>
                <td><pre class="brush:php;toolbar:false">$errstr
Errno
$errno
File $errfile Line $errline Trace
$trace
HTML; return $content; }

メール機能を処理するには、error_mail 関数を定義し、Swift Mailer などのライブラリの使用を検討してください。

追加リソース:

  • [PHP エラー処理](https://www.php.net/manual/en/features.error-handling.php)
  • [$php_errormsg](https://www.php.net/manual/en/ Reserved.variables.php#constant.$php_errormsg)

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。