2009-03-29 4 views
11

J'ai vu quelques questions similaires sur internet, aucune avec une réponse.Chargement d'une page XML distante avec file_get_contents()

Je souhaite renvoyer la source d'une page XML distante dans une chaîne. La page XML à distance, aux fins de cette question, est:

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

Dans un navigateur Web régulièrement, je peux voir la page et la source est un document XML. Lorsque j'utilise file_get_contents('http://www.test.com/foo.xml'), cependant, il renvoie une chaîne avec l'URL correspondante.

Y at-il pour récupérer le composant XML? Je m'en fiche si elle utilise file_get_contents ou pas, juste quelque chose qui fonctionnera.

+0

Voir cette question: http://stackoverflow.com/questions/692962/how-to-use-php-to-get-a-webpage-into-a-variable/ –

Répondre

14

Vous devez avoir allow_url_fopen dans votre serveur pour que cela fonctionne.

Si vous ne pas, vous pouvez utiliser cette fonction en remplacement:

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

Emprunté à here.

+0

Il n'est pas certain d'être un remplacement - ces fonctions nécessitent que PHP soit compilé avec cURL activé. Si les fopen-wrappers sont désactivés, la fonctionnalité cURL est probablement désactivée. Mieux vaut utiliser une fonction fsockopen() pour être du bon côté. –

+1

Je suis tombé sur de nombreux hébergeurs ayant des fopen-wrappers désactivés mais pas cURL, alors même si c'est vrai ce n'est pas vraiment un remplacement, ça pourrait être une bonne solution de contournement. – Seb

+0

Pour l'instruction return, je préfère une expression ternaire, comme ceci: 'return ($ contents)? $ contents: false; ' – Nolwennig

13

Cela semble étrange. File_get_contents() renvoie-t-il des données valides pour d'autres sites (pas seulement XML)? Une URL ne peut être utilisée comme paramètre de nom de fichier que si the fopen-wrappers a été activé (ce qui est le cas par défaut).

Je suppose que vous allez traiter le code XML récupéré plus tard - alors vous devriez pouvoir le charger dans SimpleXml directement en utilisant simplexml_load _file(). Je recommande l'utilisation de SimpleXML pour lire des fichiers XML, c'est très facile à utiliser.

Questions connexes