Php 为什么E_警告像E_错误一样?
我正在运行一个脚本,该脚本需要一个未正确包含在脚本中的文件Php 为什么E_警告像E_错误一样?,php,error-handling,phpseclib,Php,Error Handling,Phpseclib,我正在运行一个脚本,该脚本需要一个未正确包含在脚本中的文件 PHP致命错误:require_once():在第746行/myDir/Net/SSH2.PHP中打开所需的'Math/biginger.PHP'(include_path='。:/usr/share/PHP:/usr/share/pear')失败 我有一个error\u处理程序设置,它记录我得到的每个错误: function script_error_handler($errno, $errstr, $errfile, $errlin
PHP致命错误:require_once():在第746行/myDir/Net/SSH2.PHP中打开所需的'Math/biginger.PHP'(include_path='。:/usr/share/PHP:/usr/share/pear')失败
我有一个error\u处理程序
设置,它记录我得到的每个错误:
function script_error_handler($errno, $errstr, $errfile, $errline){
echo "IN ERROR HANDLER\n";
$GLOBALS['errors'][] = array(
'errno' => $errno,
'errstr' => $errstr,
'errfile' => $errfile,
'errline' => $errline
);
return true;
}
我还有一个shutdown\u函数
,它稍后会检查错误以确定成功或失败(除其他外)。该函数的一部分用于打印我记录的错误
function shutdown_handler($io) {
print_r($GLOBALS['errors']);
echo "\n";
//irrelevant stuff ommitted
}
奇怪的是,其结果如下:
Array
(
[0] => Array
(
[errno] => 2
[errstr] => require_once(Math/BigInteger.php): failed to open stream: No such file or directory
[errfile] => /myDir/Net/SSH2.php
[errline] => 746
)
)
根据PHP的说法,2
是E_警告的值
2 | E|u警告(整数)|运行时警告(非致命错误)。脚本的执行未停止。
这似乎与我之前得到的致命错误
输出有明显冲突。在这种情况下,我为什么不得到一个E\u错误
?这里发生了什么?require
/require\u一次
生成警告和致命错误
如果没有自己的错误处理,您应该得到如下结果:
警告:require_once(foo)[function.require once]:无法打开流:在[…]中没有这样的文件或目录
致命错误:require_once()[function.require]:打开所需的“foo”(include_path=')失败[…]
查看输出的errstr
,您会看到“未能打开流:没有这样的文件或目录”部分–因此警告的文本
这个故事告诉你
无法使用用户定义的函数处理以下错误类型:E_error,[…]
因此,正如预期的那样捕获了警告,而根据手册所述,致命错误没有捕获。你能说明你是如何注册处理程序的吗?我可以,但我看不出这有什么关系。当我从这两个处理程序中得到输出时,它们显然正在被注册和调用。但是,如果你发布一个完整的测试用例,然后在提出问题时回答他们的问题,那么人们会更容易地帮助你。因此,我应该能够检查错误\u get_last()
,如果是E_错误,则将其添加到我的shutdown_function()
中的错误列表中。这是一个公平的假设吗?