PHP の致命的なエラー (`E_ERROR`) をキャッチするにはどうすればいいですか? 質問する

PHP の致命的なエラー (`E_ERROR`) をキャッチするにはどうすればいいですか? 質問する

ほとんどの PHP エラーをキャッチするために を使用できますが、存在しない関数の呼び出しなどのset_error_handler()致命的な ( ) エラーには機能しません。これらのエラーをキャッチする別の方法はありますか?E_ERROR

mail()すべてのエラーを呼び出し、PHP 5.2.3 を実行しようとしています。

ベストアンサー1

register_shutdown_functionPHP 5.2 以降を必要とする を使用して致命的なエラーをログに記録します。

register_shutdown_function( "fatal_handler" );

function fatal_handler() {
    $errfile = "unknown file";
    $errstr  = "shutdown";
    $errno   = E_CORE_ERROR;
    $errline = 0;

    $error = error_get_last();

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

        error_mail(format_error( $errno, $errstr, $errfile, $errline));
    }
}

error_mail関数と関数を定義する必要がありますformat_error。例:

function format_error( $errno, $errstr, $errfile, $errline ) {
    $trace = print_r( debug_backtrace( false ), true );

    $content = "
    <table>
        <thead><th>Item</th><th>Description</th></thead>
        <tbody>
            <tr>
                <th>Error</th>
                <td><pre>$errstr</pre></td>
            </tr>
            <tr>
                <th>Errno</th>
                <td><pre>$errno</pre></td>
            </tr>
            <tr>
                <th>File</th>
                <td>$errfile</td>
            </tr>
            <tr>
                <th>Line</th>
                <td>$errline</td>
            </tr>
            <tr>
                <th>Trace</th>
                <td><pre>$trace</pre></td>
            </tr>
        </tbody>
    </table>";
    return $content;
}

使用Swift メール送信者関数を記述しますerror_mail

参照:

おすすめ記事