2012-02-01 58 views
1

我已經在本地構建了一個可以正常工作的腳本。我現在已經將該腳本移動到代理服務器後面,並且遇到了一些問題。由代理引起的Simplexml_load_file問題

下面的代碼:

$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解析,但不知道這是可能的嗎?

有什麼想法?

編輯:

我裝,捲曲,所以我說在代理選項,它也失敗了的頁面,並將其固定它。現在我只需要加載這個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(); 
+0

嘗試單獨提取xml並檢查它。聽起來更像是有一個外部定義的字符實體,外部定義可以被加載。 – 2012-02-01 15:29:13

+0

我該怎麼做?我只是嘗試使用file_get_contents來抓取頁面,但我得到一個未能打開流錯誤。 (實體錯誤消失) – tctc91 2012-02-01 15:32:04

+0

用我的進度更新了OP – tctc91 2012-02-01 15:39:45

回答

0

一旦你的XML文件和您確認這是正確的XML,您可以將其通過simplexml_load_string()simplexml_load_file()取決於你有什麼加載到PHP。

如果你的$的數據var是一個字符串u /良好的XML,那麼:

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

應該只是罰款。當然,現在你有一個簡單的xml對象,它可以與任何普通的simplexml函數一起工作。