PHP require语句-失败,但抛出E_警告而不是E_编译错误
我将系统中的一个文件移动到组织的子文件夹中,这又破坏了PHP require语句-失败,但抛出E_警告而不是E_编译错误,php,error-handling,require,php4,Php,Error Handling,Require,Php4,我将系统中的一个文件移动到组织的子文件夹中,这又破坏了require语句的相对路径。这应该会导致E\u COMPILE\u错误警告。但是,应用程序中的自定义错误处理程序没有捕获该错误,而是将该错误捕获为E_警告。因此,我们的客户处理程序记录了消息,结果PHP屏幕显示为空,就像die()已运行。以下是本地处理程序创建的日志: E_警告main(XXXXXX.php):无法打开流:没有此类文件或目录xxx/xxx.php第9行01-26-2012 09:44:27 AM 01-26-2012 10:
require
语句的相对路径。这应该会导致E\u COMPILE\u错误
警告。但是,应用程序中的自定义错误处理程序没有捕获该错误,而是将该错误捕获为E_警告
。因此,我们的客户处理程序记录了消息,结果PHP屏幕显示为空,就像die()代码>已运行。以下是本地处理程序创建的日志:
E_警告main(XXXXXX.php):无法打开流:没有此类文件或目录xxx/xxx.php第9行01-26-2012 09:44:27 AM 01-26-2012 10:03:24 AM
可能需要注意的是,我们的系统仍在使用破旧的php4
你知道为什么require会发出E_警告吗?由于我们看不到任何错误消息,因此花了更长的时间来找出问题所在
编辑:这个应用程序确实做了一个要求。自定义错误处理程序只是使用PHP的set_error_处理程序函数。因此,除了警告、通知和用户错误之外,不应该调用它
附加编辑:
也许结构与此有关?以下是它的工作原理:
(->平均值包括,=>平均值要求)
main->File1.php=>File2.php
它是否会因为包含但不是必需的File1.php而引发警告?这对我来说可能有道理,但似乎是个小故障?我可能需要在PHP5上进行测试
分辨率
我已经扫描了我们的应用程序,发现:
错误报告(E|U错误| E|U警告| E|U解析)
因此,E_COMPILE_错误将不会显示。此外,@DaveRandom抛出警告,然后抛出致命错误是正确的
改成
错误报告(E|U错误| E|U警告| E|U解析| E|U编译|错误);
显示错误消息。它确实在执行请求吗?E_警告似乎暗示您在那里使用include而不是require。。。或者PHP4在这方面的表现有所不同?我真的记不起来了。当您对不存在的文件调用Require时,它至少会发出一次警告。然后它发出一个E\u COMPILE\u错误
,然后消失
:
用户定义的函数无法处理以下错误类型:E_error、E_PARSE、E_CORE_error、E_CORE_WARNING、E_COMPILE_error、E_COMPILE_WARNING,以及在调用set_error_handler()的文件中引发的大部分E_STRICT
因此,恐怕您的自定义错误处理程序永远不会捕获错误。如果没有看到您的自定义错误处理程序,就无法判断。一个失败的require应该会抛出一个编译错误,但是由于您正在进行自定义工作,请检查它是否实际正常工作(失败?)。确保require语句中没有@符号,这会抑制错误报告。这绝对是一个require。我可以通过添加require来重新创建问题。我知道它不应该捕获E_COMPILE_错误。但是,所有其他致命错误都会通过PHP的错误报告设置显示在屏幕上。我可能需要为此设置一个测试。我扫描了我们的应用程序,发现了以下内容:错误报告(E|u error | E|u WARNING | E|u PARSE);因此,E_COMPILE_错误将不会显示。此外,@DaveRandom抛出警告,然后抛出致命错误是正确的。