我多年来一直使用相同的代码段。它一直在3个不同的网站上很好地工作。我最近开始使用新的Hoster,令我惊讶的是,在引用编程错误本身的行之前,会记录以下错误2到10次。例如,如果变量未定义,我得到:
PHP Warning: set_error_handler() expects the argument (log_all_errors) to be a valid callback in /home/mysite/public_html/error_handler.php on line 52
然后出现关于变量的错误。
这是一段简化的代码摘录:
# error_handler.php :
//defining a custom error_log etc ...
ini_set('display_errors', NULL);
define('SEND_ERROR_EMAIL_TO', 'mymail@mail.com');
set_error_handler('log_all_errors');
# catching the error :
include ('error_handler.php');
function log_all_errors($errno, $errstr, $errfile, $errline ) {
global $error_type;
$error_name = (isset($error_type[$errno]) ? $error_type[$errno] : 'Unknown error code - '."'".$_SESSION['ip']."'");
// defining lock file
// defining e-mail etc...
$error_message = $error_name.': '.$errstr.' in '.$errfile.' on line '.$errline;
error_log($error_message, 0);
}
set_error_handler('log_all_errors');
以前的服务器是Apache,现在它是ngnix。我已经阅读了PHP手册几个小时但我无法弄清楚为什么 log_all_errors 突然停止成为有效的回调。