首页  >  问答  >  正文

如何捕获PHP致命错误(`E_ERROR`)?

<p>我可以使用 <code>set_error_handler()</code> 来捕获大多数 PHP 错误,但它不适用于致命 (<code>E_ERROR</code>) 错误,例如调用不存在的函数。还有其他方法可以捕获这些错误吗?</p> <p>我正在尝试调用 <code>mail()</code> 来解决所有错误,并且正在运行 PHP 5.2.3。</p>
P粉978551081P粉978551081443 天前557

全部回复(1)我来回复

  • P粉576184933

    P粉5761849332023-08-28 11:12:14

    使用 register_shutdown_function 记录致命错误,这需要 PHP 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_mailformat_error 函数。例如:

    function format_error( $errno, $errstr, $errfile, $errline ) {
        $trace = print_r( debug_backtrace( false ), true );
    
        $content = "
        ”;
    返回$内容;
    }
    

    使用Swift Mailer编写error_mail函数。

    另请参阅:

    回复
    0
  • 取消回复
  • ItemDescription
    Error
    $errstr
    错误号
    $errno
    文件 $错误文件
    $错误线
    跟踪
    $trace