我对如何正确使用set_error_handler()感到困惑,而且php文档并没有帮助我澄清问题。
我希望它能够将尽可能多的错误发送给我,除了注意事项。
我有以下代码
<?php
if (TRAP_ERRORS) {
// True on production, false in development, where errors are just echoed out.
set_exception_handler('globalExceptionHandler');
set_error_handler('globalErrorHandler', E_USER_WARNING);
}
function globalExceptionHandler($e) {
//log and email stuff here
}
function globalErrorHandler($errno, $errstr, $errfile, $errline) {
switch ($errno) {
case E_NOTICE:
case E_USER_NOTICE:
$errors = "Notice";
break;
case E_WARNING:
case E_USER_WARNING:
$errors = "Warning";
break;
case E_ERROR:
case E_USER_ERROR:
$errors = "Fatal Error";
break;
default:
$errors = "Unknown Error";
break;
}
error_log(sprintf("PHP %s: %s in %s on line %d", $errors, $errstr, $errfile, $errline));
$msg = "ERROR: [$errno] $errstr\r\n".
"$errors on line $errline in file $errfile\r\n";
sendErrorEmail($msg);
showErrorPage();
exit(1);
}
function sendErrorEmail($p_errorMsg) {
// Parse and sent out the error email...
}
function showErrorPage() {
// Redirect to an error page.
}
?>
这是我的当前设置set_error_handler('globalErrorHandler', E_USER_WARNING);
,但似乎有问题,因为它不能处理trigger_error()错误。我认为这是因为参数应该是一个位掩码而不仅仅是单个错误级别,但我不确定如何设置它以处理最大数量的错误/信息(除了通知)。我看到有使用E_ALL
的示例,但这实际上会导致包括全局错误处理程序内容的任何代码出错。那么,我该如何使用set_error_handler来处理最大数量的信息,使得我的自定义错误处理程序能够自动发送电子邮件直接处理此类问题,而无需稍后查看日志?
set_error_handler('some_handler', error_reporting());
。 - Kzqai