【问题标题】:Loading a remote xml page with file_get_contents()使用 file_get_contents() 加载远程 xml 页面
【发布时间】:2010-10-16 06:26:57
【问题描述】:

我在网上看到一些类似的问题,没有答案。

我想将远程 XML 页面的源返回为字符串。就本问题而言,远程 XML 页面是:

http://www.test.com/foo.xml

在普通的网络浏览器中,我可以查看页面并且源是 XML 文档。但是,当我使用file_get_contents('http://www.test.com/foo.xml') 时,它会返回一个带有相应 URL 的字符串。

是否有检索 XML 组件?我不在乎它是否使用 file_get_contents,只要能用就行。

【问题讨论】:

标签: php xml file-get-contents


【解决方案1】:

您需要在服务器中设置 allow_url_fopen 才能使其正常工作。

如果你不这样做,那么你可以使用这个函数作为替代:

<?php
function curl_get_file_contents($URL)
    {
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);

        if ($contents) return $contents;
            else return FALSE;
    }
?>

借自here

【讨论】:

  • 它不一定是替代品——这些功能需要在编译 PHP 时启用 cURL。如果 fopen-wrappers 被禁用,则 cURL 功能也可能被禁用。为了安全起见,最好使用 fsockopen() 函数。
  • 我遇到过很多禁用 fopen-wrappers 但没有 cURL 的主机,所以虽然它确实不是一个替代品,但它可能是一个不错的解决方法。
  • 对于 return 语句,我更喜欢三元表达式,像这样:return ($contents) ? $contents : false;
【解决方案2】:

这似乎很奇怪。 file_get_contents() 是否为其他站点(不仅是 XML)返回任何有效数据?如果the fopen-wrappers 已启用(默认情况下),则 URL 只能用作文件名参数。

我猜你稍后会处理检索到的 XML - 然后你应该能够直接使用 simplexml_load _file() 将其加载到 SimpleXml

try {
   $xml = simplexml_load_file('http://www.test.com/foo.xml');
   print_r($xml);
} ...

我推荐使用 SimpleXML 来读取 XML 文件,它非常好用。

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 2012-06-22
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多