1

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 のバグのような匂いがし始めていますか?

4

0 に答える 0