0

我正在使用 nettuts 的以下脚本:

// Our custom error handler  
function error_engine($number, $message, $file, $line, $vars)  

{  
    $email = " 
        <p>An error ($number) occurred on line  
        <strong>$line</strong> and in the <strong>file: $file.</strong>  
        <p> $message </p>";  

    $email .= "<pre>" . print_r($vars, 1) . "</pre>";  

    $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

    // Email the error to someone...  
    error_log($email, 1, 'example@example.com', $headers);  


    if ( ($number !== E_NOTICE) && ($number < 2048) ) {  
        die("There was an error. Please try again later.");  
    }  
}  

// We should use our custom function to handle errors.  
set_error_handler('error_engine'); 

它适用于通知和警告等,但是当我故意破坏我的脚本时,比如将“mysqli_connect”更改为“mysqy_connct”,我会在屏幕上打印出致命错误并且没有电子邮件!

此类错误是否超出了此类错误记录/报告的范围?

我究竟做错了什么?

4

2 回答 2

3

set_error_handler/set_exception_handler不处理所有可能的错误。也就是说,解析错误不会被它捕获。我不能确切地告诉你它不能处理什么。一般规则是,这些处理程序在本应被 a 捕获的内容try catch或何时trigger_error被调用时被调用

set_error_handler/set_exception_handler捕获许多框架未捕获的错误,使用register_shutdown_functionerror_get_last的组合

于 2012-08-11T18:19:16.097 回答
3

它在文档中列出:

用户定义的函数无法处理以下错误类型:E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING,以及在调用 set_error_handler() 的文件中引发的大部分 E_STRICT。

于 2012-08-11T18:23:55.077 回答