间歇性simplexml_load_file():本地Joomla站点上的I / O警告

时间:2013-12-12 04:08:05

标签: php joomla

我刚刚开始在我在本地主机上运行的joomla开发网站的所有页面上出现间歇性错误。

完整的警告是:

Warning: simplexml_load_file(): I/O warning : failed to load external entity "/site/language/en-GB/en-GB.xml" in /site/libraries/joomla/language/language.php on line 1354

奇怪的是它是间歇性的,一些刷新通常可以解决这个问题。

是否存在可能导致此问题的代码问题,还是其他问题?

2 个答案:

答案 0 :(得分:9)

让我把它放在这里以防万一有人会谷歌寻求答案,非线程安全 libxml_disable_entity_loader(false)的解决方案将不适用。在系统范围内启用实体加载程序的潜在漏洞如下所示:

<!DOCTYPE scan [<!ENTITY test SYSTEM 
      "php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>

here解释了由于缺乏线程安全性而导致的问题。虽然可以使用libxml_set_external_entity_loader注册她自己的实体加载器,或使用锁来保护对libxml_disable_entity_loader的调用,但这些解决方案似乎有点令人费解。

好消息是外部实体的问题影响处理文件的功能(例如simplexml_load_fileDOMDocument::schemaValidate等) 。这使解决方案变得简单直接。首先将文件内容作为字符串加载,然后执行相应的libxml字符串导向函数。

simplexml_load_string(file_get_contents($xml));

和/或

$xml = new DOMDocument('1.0', 'UTF8');
$xml->loadXML(file_get_contents($xmlFile));
$xml->schemaValidateSource(file_get_contents($xsdFile));

希望它对某人有帮助。

答案 1 :(得分:5)

现在还没有确切地说这个解决方案有效,但它现在似乎已经解决了。

编辑:自从进行此更改后未发生任何重复,因此我可以确认这已解决了问题。

libxml_disable_entity_loader(false);添加到joomla的index.php

在Joomla论坛上,Cornel在他的帖子中感谢Corneliu:

J! 3.1.6/3.2 simplexml_load_file, JForm::getInstance errors