我有一个使用set_error_handler
. 当我试图包含一个不存在的文件时,PHP 调用 error_handler 的次数超出了它应有的次数:
<?php
error_reporting(E_ALL | E_STRICT);
set_error_handler(function($errno, $errstr, $errfile, $errline, $errcontext){
if(error_reporting() !== 0){
echo "<br>";
echo "<br>In Custom Error Handler...";
echo "<br>Err String: ", $errstr;
echo "<br>Passing to Default Handler...";
}
return false; // allow default
});
include("/missing_file.php"); // line 11
?>
输出:
在自定义错误处理程序中... // 这是额外的错误处理程序调用
错误字符串:包含(/missing_file.php)[function.include]:无法打开流:没有这样的文件或目录
传递给默认处理程序...
// 默认处理程序什么也不做,即使 error_reporting 不为零
// 下一阶段:
在自定义错误处理程序中...
错误字符串:include() [function.include]:无法打开 '/missing_file.php' 以包含 (include_path='.:/usr/lib/php:/usr/local/lib/php')
传递给默认处理程序...
警告:include() [function.include]:未能打开“/missing_file.php”以包含在 第11行的/home/yccom/public_html/apr/test.php中
观察到相同的行为require
。
例如,将第 11 行更改为require
将给出以下输出:
在自定义错误处理程序中... // 这是额外的错误处理程序调用
错误字符串:需要(/missing_file.php)[function.require]:无法打开流:没有这样的文件或目录
传递给默认处理程序...
// 默认处理程序什么也不做,即使 error_reporting 不为零
// 下一阶段:
致命错误:require() [function.require]:无法在第11行的/home/yccom/public_html/apr/test.php中打开所需的“/missing_file.php”
什么可能导致错误处理程序的额外调用?