XML-файл открывается в браузере, но не открывается с помощью simplexml_load_file

1

Когда я открываю 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.

Буду признателен за любую помощь!

Большое спасибо!

  • 0
    Это настоящие сообщения об ошибках? т.е. является ли URL, указанный в ошибках, фактическим URL?
  • 0
    просто чтобы подтвердить, можете ли вы открыть оба URL-адреса в окне браузера, но один из них выдает 404 при попытке загрузить его с помощью simplexml_load_file ? Можете ли вы получить доступ к URL из терминала через curl? ех. $> curl http://problem.url.com/dados.xml ?
Показать ещё 2 комментария
Теги:
simplexml

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню