什么会导致DOMDocument.load无法从可访问的URL加载XML?

时间:2010-10-21 02:07:18

标签: php xml dom

$doc = new DOMDocument();
if ($doc->load('http://foo.com/bar.xml')) {
  // good
} else {
  // wtf happened?
}

我可以从运行PHP代码的位置wget http://foo.com/bar.xml,因此我知道URL是可访问的。我认为它必须是HTTP错误以外的东西。

我不确定还有什么可能导致失败。也许解析问题? XML似乎是有效的(并通过了W3C的验证测试)。据我所知documentation,没有办法确定为什么发生了负载故障。

这是XML:

 <response> 
  <version>8</version> 
  <minversion>1</minversion> 
  <url>api.asp?</url> 
 </response>

2 个答案:

答案 0 :(得分:4)

我最终将其缩小为名为allow_url_fopen的{​​{3}},在运行该脚本的服务器上设置为Off

我修改了php.ini文件以启用此设置:

allow_url_fopen = On

现在DOMDocument.load可以从远程URL加载XML。

警告:显然有一些PHP configuration setting会永久保留此设置。

答案 1 :(得分:2)

添加:

    libxml_use_internal_errors ( true );
    $doc = new DOMDocument();
    $doc -> recover = true;
    $doc -> strictErrorChecking = false;