2009-03-29 19 views
11

He visto algunas preguntas similares a esta en Internet, ninguna con una respuesta.Cargando una página xml remota con file_get_contents()

Quiero devolver el origen de una página XML remota en una cadena. La página XML remoto, a los efectos de esta pregunta, es:

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

En un navegador web normal, que puede ver la página y la fuente es un documento XML. Cuando uso file_get_contents('http://www.test.com/foo.xml'), sin embargo, devuelve una cadena con la URL correspondiente.

¿Hay que recuperar el componente XML? No me importa si usa file_get_contents o no, solo algo que funcionará.

+0

Consulte esta pregunta: http://stackoverflow.com/questions/692962/how-to-use-php-to-get-a-webpage-into-a-variable/ –

Respuesta

14

Debe tener allow_url_fopen establecido en su servidor para que esto funcione.

Si no te, a continuación, puede utilizar esta función como un reemplazo:

<?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; 
    } 
?> 

tomado de here.

+0

No es seguro que sea un reemplazo - estas funciones requieren que PHP esté compilado con cURL habilitado. Si los fopen-wrappers están desactivados, la funcionalidad cURL probablemente también esté deshabilitada. Es mejor usar una función fsockopen() para estar en el lado seguro. –

+1

He entrado en muchos alojamientos con fopen-wrappers desactivados pero no en cURL, así que si bien es cierto que no es exactamente un reemplazo, podría ser una buena solución. – Seb

+0

Para la declaración de devolución prefiero una expresión ternaria, como esta: 'return ($ contents)? $ contenido: falso; ' – Nolwennig

13

Eso parece extraño. ¿File_get_contents() devuelve datos válidos para otros sitios (no solo XML)? Una URL solo se puede usar como parámetro de nombre de archivo si se ha habilitado the fopen-wrappers (que son por defecto).

Supongo que va a procesar el XML recuperado más tarde - entonces debería poder cargarlo en SimpleXml directamente usando el simplexml_load _file().

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

Recomiendo usar SimpleXML para leer archivos XML, es muy fácil de usar.