Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menangkap Ralat PHP Fatal Menggunakan register_shutdown_function?

Bagaimanakah Saya Boleh Menangkap Ralat PHP Fatal Menggunakan register_shutdown_function?

Barbara Streisand
Barbara Streisandasal
2024-12-22 19:41:15317semak imbas

How Can I Catch Fatal PHP Errors Using register_shutdown_function?

Menangkap Ralat Maut PHP Melalui Mendaftar Fungsi Penutupan

Masalah:
Sementara set_error_handler() boleh menangani kebanyakan ralat PHP, ia gagal menangkap ralat maut (E_ERROR), seperti itu disebabkan oleh memanggil fungsi yang tidak wujud.

Penyelesaian:
PHP 5.2 memperkenalkan register_shutdown_function, yang membolehkan anda mencatat ralat maut:

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"]
        ));
    }
}

Tentukan fungsi format_error untuk memformat maklumat ralat:

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; }

Untuk mengendalikan fungsi mel, tentukan fungsi error_mail dan pertimbangkan untuk menggunakan perpustakaan seperti Swift Mailer.

Sumber Tambahan:

  • [Ralat PHP Pengendalian](https://www.php.net/manual/en/features.error-handling.php)
  • [$php_errormsg](https://www.php.net/manual/en/ reserved.variables.php#constant.$php_errormsg)

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap Ralat PHP Fatal Menggunakan register_shutdown_function?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn