我正在尝试使用set_error_handler
函数来捕获require
错误
当我的自定义error_handler
被使用时,上下文似乎完全关闭,尽管跟踪是正确的。
<?php
function error_handler($errno, $errstr, $errfile, $errline){
throw new Exception($errstr);
}
set_error_handler('error_handler');
try{
trigger_error("somethign",E_USER_NOTICE);
}catch(Exception $e){
echo "I got caught";
}
try{
require "something/that/does/not/exists.php";
}catch(Exception $e){
echo "I got caught";
}
可以看出,当我触发第一个错误时,它会触发error_handler
,而error_handler
又会引发异常。这是第一次尝试捕获。
第二次,我尝试包含一个未存在的文件,再次使用{{1}},但没有捕获到异常。
这是怎么回事?
我使用的是PHP 5.5。*
在CLI模式下测试。
答案 0 :(得分:1)
请阅读文档:
要求与包含相同,除非失败时也是如此 产生致命的E_COMPILE_ERROR级别错误。换句话说,它会 暂停脚本
(http://php.net/manual/en/function.require.php)
这意味着,遇到此错误时将中止脚本执行。将使用您的自定义错误处理程序,但throw
将被忽略,因为这假设此时不允许进一步执行。
答案 1 :(得分:0)
重要的是要记住PHP有两种常见的错误类型
在您的情况下,require
是编译错误。它不会执行您的用户定义函数,因为它永远不会那么远。编译器不能包含坏文件并将失败。