【问题标题】:What php/server settings might prevent simplexml_load_file() from working?哪些 php/server 设置可能会阻止 simplexml_load_file() 工作?
【发布时间】:2012-12-05 09:20:21
【问题描述】:

我正在使用simplexml_load_file() 来获取 RSS 提要的内容:

$rss = simplexml_load_file('http://www.iolproperty.co.za/roller/news/feed/entries/rss');

这在我的本地服务器上按预期工作,但在部署到我的客户的生产服务器时静默失败,返回一个空结果。

phpinfo() 函数表示启用了 SimpleXML 支持,并且似乎允许我访问远程文件(cURL 函数工作得很好)。我也尝试过加载不同的 RSS 提要。同样,它们在本地工作,但在部署时返回空。

【问题讨论】:

  • 启用错误报告。这应该告诉你出了什么问题。

标签: php simplexml


【解决方案1】:

simplexml_load_file 需要在php.ini 中启用allow_url_fopen 指令才能加载外部文件。 Curl 函数不需要这个指令,所以它对你有用。

【讨论】:

  • 要理解为什么会这样,考虑simplexml_load_file($url)simplexml_load_string(file_get_contents($url))基本相同,而file_get_contents($url)基本上是使用fopen($url)并读出内容的简写“文件”。 ini 设置允许您将 URL 视为 fopen 和所有相关函数的“文件”。
【解决方案2】:

您必须启用 allow_url_fopen option 才能使其工作。

【讨论】:

    【解决方案3】:

    生产服务器可能会阻止传出 Internet 请求以防止滥用。另一个原因可能是它的 PHP 版本不同或配置中未包含某些模块。使用错误报告查看错误信息

    error_reporting(E_ALL);
    

    //更新

    您还可以检查是否从服务器返回值,例如

    $c = implode('', file('http://www.iolproperty.co.za/roller/news/feed/entries/rss'));
    print $c;
    $rss = simplexml_load_string($c);
    

    并检查其他人在说什么,检查allow_url_fopen选项是否启用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2010-09-12
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多