首頁  >  問答  >  主體

如何捕捉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粉978551081440 天前555

全部回覆(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 Mailererror_mail函數。

    另請參閱:

    #

    回覆
    0
  • 取消回覆
  • ItemDescription
    Error
    $errstr
    錯誤號碼
    $errno
    檔案 $錯誤檔案
    $錯誤線
    跟蹤
    $trace