我使用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”,我会在屏幕上打印出致命错误并且没有电子邮件!
这样的错误是否超出了此类错误记录/报告的范围?
我做错了什么?
答案 0 :(得分:3)
set_error_handler/set_exception_handler
无法处理所有可能的错误。也就是说,它不会捕获解析错误。我无法确切地告诉你它无法处理的内容。一般规则是,当try catch
或trigger_error
被称为
捕获set_error_handler/set_exception_handler
未捕获的错误许多框架使用register_shutdown_function和error_get_last的组合
答案 1 :(得分:3)
它列在documentation:
中使用用户定义的函数无法处理以下错误类型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,以及调用set_error_handler()的文件中引发的大部分E_STRICT。