在PHP 5.3.3-7上,我使用DOMDocument-> load()来加载本地文件,最近我开始遇到我开始获取E_WARNING的情况
DOMDocument::load() [domdocument.load]: I/O warning : failed to load external entity "/path/to/local/file/that/does/exist"
一旦这种情况开始发生,我发现让错误停止的唯一方法就是重启apache,然后它再好了一段时间。
我最近没有更改任何相关代码,但是我发现在我为CVE-2013-1643安装了Debian补丁后,这种情况开始发生,这似乎可能会禁用实体加载...如果有一个实例一个会触发禁用的事件,是否可以为所有未来的PHP请求永久禁用它,直到重启?这看起来很激进。相比之下,libxml_disable_entity_loader()似乎只对当前请求进行操作。
我没有代码,我知道应该加载远程XML并且会触发禁用,但如果这是正在发生的事情,我会期望在我的php错误日志中显示某些内容,但我不知道什么都看见我应该调查哪些其他途径?
编辑:最后,我已经能够预测地重复这个问题了。如果我故意超过单个会话中允许的内存限制......
mod_fcgid: stderr: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
...然后我开始在所有后续调用DOMDocument-> load()时收到I / O警告。这一次,我能够在不重启apache的情况下再次运行...只需调用libxml_disable_entity_loader(false)。这真是一种时髦的行为 - 它开始闻起来像是php中的一个bug?