由代理引起的Simplexml_load_file问题

时间:2012-02-01 15:26:11

标签: php xml curl simplexml

我在本地构建了一个可以正常工作的脚本。我现在已将该脚本移到代理服务器后面的服务器上,我遇到了一些问题。

以下是代码:

    $yahooXML = simplexml_load_file('http://query.yahooapis.com/v1/public/yql?q=select+*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22'.$from.''.$to.'%22)&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys'); 

    print_r($yahooXML);
    die();

我收到无法打开的流和I / O警告:使用此方法无法加载外部实体错误。

我探索了使用cURL加载数据,然后使用simplexml解析但不确定这是否可行?

任何想法?

编辑:

我加载了CURL页面也失败了所以我添加了代理选项并修复了它。现在我只需要用XML加载它吗?

   function curl($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_PROXY, 'proxysg.uwe.ac.uk:8080'); 
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }


    $feed = 'http://query.yahooapis.com/v1/public/yql?q=select+*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22'.$from.''.$to.'%22)&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys';
    $data = curl($feed);

    echo $data;
    die();

1 个答案:

答案 0 :(得分:0)

获得XML文件后,您已经确认它是正确的XML,您可以通过simplexml_load_string()simplexml_load_file()将其加载到php中,具体取决于您拥有的内容。

如果你的$ data var是一个字符串w /格式良好的XML,那么:

$xml = simplexml_load_string($data);
print_r($xml);

应该工作得很好。当然,现在你有一个简单的xml对象,它可以用于任何普通的simplexml函数。