2015-11-06 109 views
1

當我在瀏覽器上打開XML(客戶端2)的URL時,它完全打開,但是當我嘗試打開同一個URL(複製並粘貼完整) PHP中的simplexml_load_file我得到了錯誤,包括404(NOT FOUND)。有沒有人有任何解決方案?在瀏覽器中打開XML文件,但無法用simplexml_load_file打開

注意:我將客戶的地址(URL)和PHP文件的路徑更改爲'/path/arquivo.php'。

<?php 

$customers[1] = 'http://www.customer1.com.br/dados.xml'; 
$customers[2] = 'http://www.customer2.com.br/dados.xml'; 

$xml1 = simplexml_load_file ($customers[1]); // it works perfectly 
$xml2 = simplexml_load_file ($customers[2]); // ERROR 

錯誤,我得到了

警告:的file_get_contents(http://www.cliente2.com.br/dados.xml):未能打開流:HTTP請求失敗! HTTP/1.1 404 /path/arquivo.php未找到第5行

警告:使用simplexml_load_file():I/O警告:失敗/path/arquivo.php來加載外部實體 「http://www.cliente2.com.br/dados.xml」 在第5行

我試過在打開文件之前使用libxml_disable_entity_loader (false);,但錯誤依然存在。

我使用Ubuntu 14.04.3 LTS,PHP 5.5.9。

我會感謝任何幫助!

非常感謝!

+0

準備這些是實際的錯誤消息?即:是錯誤中給出的網址實際的網址? – RamRaider

+0

只是爲了確認,你是否能夠在瀏覽器窗口中打開這兩個url,但是當你試圖用'simplexml_load_file'加載它時,其中一個會發出一個404?你能通過curl從終端訪問url嗎?恩。 '$> curl http:// problem.url.com/dados.xml'? –

+0

是的,兩個作品。是的,我可以通過捲曲從終端訪問它。 –

回答

2

看來,網絡服務器過濾掉沒有適當的User-Agent進來的請求。

所以你需要使用curl,通過一個用戶代理(我剛剛使用最新的Chrome用戶代理)並得到響應。

<?php 

$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL,'http://www.cliente2.com.br/dados.xml'); 
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'); 
$response = curl_exec($curl_handle); 
curl_close($curl_handle); 

//var_dump($response); 

$xml = simplexml_load_string($response); 

print_r($xml); 

是長期輸出

+0

非常感謝!工作得很好! –

+0

不客氣@AllanAndrade –