Когда я открываю URL-адрес XML (клиент 2) в браузере, он открывается отлично, но когда я пытаюсь открыть тот же URL-адрес (скопированный и вставленный полностью) с помощью simplexml_load_file в PHP, я получил ошибки, в том числе 404 (NOT FOUND). У кого-нибудь есть решение?
Примечание. Я изменил адреса клиентов (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(): предупреждение ввода-вывода: не удалось загрузить внешний объект " http://www.cliente2.com.br/dados.xml " в /path/arquivo.php в строке 5
Я пробовал использовать libxml_disable_entity_loader (false);
перед открытием файла, но ошибка остается.
Я использую Ubuntu 14.04.3 LTS, с PHP 5.5.9.
Буду признателен за любую помощь!
Большое спасибо!
Похоже, что веб-сервер отфильтровывает запросы, входящие без надлежащего 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);
Будьте готовы к длинному выходу
simplexml_load_file
? Можете ли вы получить доступ к URL из терминала через curl? ех.$> curl http://problem.url.com/dados.xml
?