2009-03-29 2 views
11

Я видел некоторые вопросы, подобные этому в Интернете, ни один с ответом.Загрузка удаленной xml-страницы с файлом_get_contents()

Я хочу вернуть источник удаленной XML-страницы в строку. Страница удаленного XML, для целей данного вопроса, является:

http://www.test.com/foo.xml 

В обычном WebBrowser, я могу просмотреть страницу и источник является XML-документ. Однако, когда я использую file_get_contents('http://www.test.com/foo.xml'), он возвращает строку с соответствующим URL-адресом.

Нужно ли получить XML-компонент? Мне все равно, если он использует file_get_contents или нет, просто что-то, что сработает.

+0

См. Этот вопрос: http://stackoverflow.com/questions/692962/how-to-use-php-to-get-a-webpage-into-a-variable/ –

ответ

14

Для этого необходимо иметь allow_url_fopen на вашем сервере.

Если вам не, то вы можете использовать эту функцию в качестве замены:

<?php 
function curl_get_file_contents($URL) 
    { 
     $c = curl_init(); 
     curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($c, CURLOPT_URL, $URL); 
     $contents = curl_exec($c); 
     curl_close($c); 

     if ($contents) return $contents; 
      else return FALSE; 
    } 
?> 

Заимствованные из here.

+0

Это не обязательно будет замена - эти функции требуют, чтобы PHP был скомпилирован с включенным cURL. Если обертки fopen отключены, функция cURL, вероятно, также отключена. Лучше использовать функцию fsockopen(), чтобы быть в безопасности. –

+1

Я пришел во множество хостингов, у которых fopen-wrappers отключен, но не cURL, поэтому, хотя это правда, это не совсем замена, это может быть приятным обходным решением. – Seb

+0

Для оператора return я предпочитаю трехмерное выражение, например: 'return ($ contents)? $ contents: false; ' – Nolwennig

13

Это кажется странным. Ли file_get_contents() возвращает любые допустимые данные для других сайтов (а не только для XML)? URL-адрес может использоваться только как параметр имени файла, если the fopen-wrappers был включен (что по умолчанию).

Я предполагаю, что вы собираетесь обработать извлеченный XML позже - тогда вы сможете загрузить его в SimpleXml напрямую, используя simplexml_load _file().

try { 
    $xml = simplexml_load_file('http://www.test.com/foo.xml'); 
    print_r($xml); 
} ... 

Я рекомендую использовать SimpleXML для чтения XML-файлов, он очень прост в использовании.

Смежные вопросы