【问题标题】:What would cause DOMDocument.load to fail loading XML from a URL that is accessible?什么会导致 DOMDocument.load 从可访问的 URL 加载 XML 失败?
【发布时间】:2010-10-21 02:07:17
【问题描述】:
$doc = new DOMDocument();
if ($doc->load('http://foo.com/bar.xml')) {
  // good
} else {
  // wtf happened?
}

我可以从运行 PHP 代码的位置wget @987654321@,所以我知道该 URL 是可访问的。我认为它一定不是 HTTP 错误。

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

这是 XML:

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

【问题讨论】:

    标签: php xml dom


    【解决方案1】:

    我最终将其缩小到一个名为allow_url_fopenPHP configuration setting,在运行脚本的服务器上设置为Off

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

    allow_url_fopen = On
    

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

    警告:显然有一些security issues 永久保持此设置。

    【讨论】:

      【解决方案2】:

      添加这个:

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

      【讨论】:

      • 这对我有什么用? (我不是 PHP 人,这是我正在做的一次性事情)
      • 它只是抑制错误并允许您的代码在发生故障时继续执行。要检查确切的问题是什么,请附加以下内容:var_dump ( libxml_get_errors () );
      • 哦,谢谢!我的代码继续(它遇到了else 子句),但我需要知道原因。希望var_dump 能告诉我出了什么问题。
      • 所以,这只是给了我“无法加载外部实体”;不像我希望的那样具有描述性。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多