为什么这个PHP错误脚本没有向我发送致命错误的电子邮件?

为什么这个PHP错误脚本没有向我发送致命错误的电子邮件?,php,Php,我正在使用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 <st

我正在使用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'); 
//我们的自定义错误处理程序
函数错误\u引擎($number、$message、$file、$line、$vars)
{  
$email=”
第行出现错误($number)
$line文件中的:$file.
$message

“; $email.=''.print\r($vars,1)。''; $headers='内容类型:text/html;charset=iso-8859-1'。“\r\n”; //将错误通过电子邮件发送给某人。。。 错误日志($email,1,'example@example.com“,$headers); 如果($number!==E_通知)&($number<2048)){ die(“出现错误。请稍后再试。”); } } //我们应该使用自定义函数来处理错误。 设置错误处理程序(“错误引擎”);
它适用于通知和警告等,但当我故意破坏我的脚本时,比如通过将“mysqli_connect”更改为“mysqly_connect”,我会在屏幕上打印出致命错误,并且没有电子邮件

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


我做错了什么

set\u error\u handler/set\u exception\u handler
不会处理所有可能的错误。也就是说,解析错误不会被它捕获。我不能确切地告诉你它不能处理什么。一般规则是,在调用
try-catch
trigger\u error
时调用这些处理程序


为了捕获未被
set\u error\u handler/set\u exception\u handler
捕获的错误,许多框架使用和的组合
set\u error\u handler/set\u exception\u handler
不会处理所有可能的错误。也就是说,解析错误不会被它捕获。我不能确切地告诉你它不能处理什么。一般规则是,在调用
try-catch
trigger\u error
时调用这些处理程序

要捕获未被
set\u error\u handler/set\u exception\u handler捕获的错误,许多框架使用和的组合,如下所示:

以下错误类型不能用用户定义的函数处理:E_error、E_PARSE、E_CORE_error、E_CORE_WARNING、E_COMPILE_error、E_COMPILE_WARNING,以及调用set_error_handler()的文件中引发的大部分E_STRICT

它列在以下列表中:

以下错误类型不能用用户定义的函数处理:E_error、E_PARSE、E_CORE_error、E_CORE_WARNING、E_COMPILE_error、E_COMPILE_WARNING,以及调用set_error_handler()的文件中引发的大部分E_STRICT