Мне нужно прочитать XML-файл из URL-адреса
$map_url = "http://maps.google.com/maps/api/directions/xml?origin=".$merchant_address_url."&destination=".$customer_address_url."&sensor=false";
Это дает мне URL-адрес:
http://maps.google.com/maps/api/directions/xml?origin=Quentin+Road+Brooklyn%2C+New+York%2C+11234+United+States&destination=550+Madison+Avenue+New+York% 2C + New York +% 2C + 10001 + Соединенные Штаты + & датчик = ложь
Я использую эту функцию для чтения и получения данных:
$response_xml_data = file_get_contents($map_url); if($response_xml_data){ echo "read"; } $data = simplexml_load_string($response_xml_data); echo "<pre>"; print_r($data); exit;
Но не повезло, никакой помощи?
Ваш код кажется правильным, проверьте, включено ли fopen wrappers ( allow_url_fopen = On
on php.ini)
Кроме того, как упоминалось в других ответах, вы должны предоставить правильно закодированный URI или закодировать его с помощью функции urlencode () . Вы также должны проверить, есть ли какая-либо ошибка, получающая XML-строку, и если есть какая-либо ошибка синтаксического анализа, которую вы можете вывести с помощью libxml_get_errors () следующим образом:
<?php if (($response_xml_data = file_get_contents($map_url))===false){ echo "Error fetching XML\n"; } else { libxml_use_internal_errors(true); $data = simplexml_load_string($response_xml_data); if (!$data) { echo "Error loading XML\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } } else { print_r($data); } } ?>
Если проблема в том, что вы не можете получить XML-код, возможно, это связано с тем, что вам нужно включить в запрос некоторые пользовательские заголовки, проверьте, как использовать stream_context_create () для создания настраиваемого контекста потока для использования при вызове file_get_contents()
на примере 4 в http://php.net/manual/en/function.file-get-contents.php
вы можете получить данные из XML с помощью функции «simplexml_load_file». См. Эту ссылку
http://php.net/manual/en/function.simplexml-load-file.php
$url = "http://maps.google.com/maps/api/directions/xml?origin=Quentin+Road+Brooklyn%2C+New+York%2C+11234+United+States&destination=550+Madison+Avenue+New+York%2C+New+York%2C+10001+United+States&sensor=false"; $xml = simplexml_load_file($url); print_r($xml);
-$url = "http://maps.google.com/maps/api/directions/xml?origin=Quentin+Road+Brooklyn%2C+New+York%2C+11234+United+States&destination=550+Madison+Avenue+New+York%2C+New+York%2C+10001+United+States&sensor=false"; $xml = simplexml_load_file($url); print_r($xml);
file_get_contents обычно имеет проблемы с правами. Чтобы избежать их, используйте:
function get_xml_from_url($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); $xmlstr = curl_exec($ch); curl_close($ch); return $xmlstr; }
Пример:
$xmlstr = get_xml_from_url('http://www.camara.gov.br/SitCamaraWS/Deputados.asmx/ObterDeputados'); $xmlobj = new SimpleXMLElement($xmlstr); $xmlobj = (array)$xmlobj;//optional
Он работает для меня. Я думаю, вам, вероятно, нужно использовать urlencode()
для каждого из компонентов $map_url
.
$url = 'http://www.example.com'; $xml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA);
$ url может быть php-файлом, если файл генерирует данные формата XML в качестве вывода.