1

在 PHP 5.3.3-7 上,我使用 DOMDocument->load() 加载本地文件,最近我开始遇到开始收到 E_WARNINGs 的情况

 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 中的错误?

4

0 回答 0