XML文件在浏览器中打开,但不会使用simplexml_load_file打开

时间:2015-11-06 21:58:19

标签: php xml simplexml

当我在浏览器上打开XML(客户端2)的URL时,它会完美打开,但是当我尝试使用PHP中的simplexml_load_file打开相同的URL(完全复制并粘贴)时,我得到了错误,包括404(NOT找到)。有没有人有任何解决方案?

注意:我将客户的地址(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请求失败!在第5行的/path/arquivo.php中找不到HTTP / 1.1 404

     

警告:simplexml_load_file():I / O警告:无法在第5行的/path/arquivo.php中加载外部实体“http://www.cliente2.com.br/dados.xml

我在打开文件之前尝试使用libxml_disable_entity_loader (false);,但错误仍然存​​在。

我正在使用Ubuntu 14.04.3 LTS,PHP 5.5.9。

我会感激任何帮助!

非常感谢!

1 个答案:

答案 0 :(得分:3)

网络服务器似乎过滤掉了没有正确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);

为长输出做好准备