2010-01-04 5 views
0

J'ai un code simple écrit (basé sur certains tutoriels trouvés sur Internet) pour analyser et afficher un fichier XML. Cependant, je ne sais comment référencer un fichier XML stocké sur mon serveur et j'aimerais pouvoir utiliser un fichier XML qui me sera renvoyé à partir d'un POST.Comment analyser un fichier XML externe (renvoyé à partir d'un POST) avec php?

En ce moment, mon code ressemble à ceci:

if(! $xml = simplexml_load_file('test.xml')) 
{ 
    echo 'unable to load XML file'; 
} 
else 
{ 
    foreach($xml as $event) 
    { 
     echo 'Title: '; 
     echo "<a href=\"$event->url\">$event->title</a><br />"; 
     echo 'Description: '.$event->info.'<br />'; 
     echo '<br />'; 
    } 
} 

Est-il possible que je peux remplacer la fonction simplexml_load_file avec celui qui me permettra de pointer vers l'URL POST qui renvoie le fichier XML?

Répondre

3

Utilisation simplexml_load_string au lieu de loadfile:

simplexml_load_string($_POST['a']); 

Si vous obtenez l'URL du fichier dans le POST, vous pouvez utiliser la fonction propably simplexml_load_file avec l'URL, mais si cela ne fonctionne pas, vous pouvez utiliser le file_get_contents en combinaison avec le simplexml_load_string:

//say $_POST['a'] == 'http://example.com/test.xml'; 
simplexml_load_file($_POST['a']); // <-- propably works 
simplexml_load_string(file_get_contents($_POST['a'])); //<-- defenitly works (propaly what happens internally) 

également obtenir le contenu des fichiers externes pourraient être interdits en exécutant PHP en mode sans échec.

2

Si vous recevez un fichier qui a été téléchargé par l'utilisateur, vous pouvez le trouver (le fichier) regardant le contenu de la $_FILES variables superglobale - et vous pouvez en savoir plus sur les téléchargements de fichiers here(pour par exemple, n'oubliez pas d'appeler le move_uploaded_file si vous ne voulez pas que le fichier soit supprimé à la fin de la requête). Ensuite, vous pouvez travailler avec ce fichier de la même manière que vous le faites déjà avec des fichiers non téléchargés.


Si vous recevez une chaîne XML, vous pouvez utiliser simplexml_load_string dessus.


Et si vous ne recevez l'URL d'un contenu XML à distance, vous devez:

  • télécharger le fichier sur votre serveur
  • et, ensuite, analyser son contenu.

Cela peut être fait en utilisant simplexml_load_file, en passant l'URL comme paramètre, si votre serveur est correctement configuré (à savoir si allow_url_fopen est activé).

Sinon, le téléchargement devra être fait en utilisant curl - voir curl_exec pour un exemple très basique, et curl_setopt pour les options que vous pouvez utiliser (vous voulez surtout utiliser CURLOPT_RETURNTRANSFER, pour obtenir les données XML en tant que chaîne que vous pouvez passer à simplexml_load_string).

0

Découvrez simplexml_load_string. Vous pouvez ensuite utiliser cURL pour faire le post et récupérer le résultat.Un exemple:

<?php 
$xml = simplexml_load_string($string_fetched_with_curl); 
?> 
1

De http://www.developershome.com/wap/wapUpload/wap_upload.asp?page=php4:

Si vous ne souhaitez pas enregistrer le fichier téléchargé directement, mais pour traiter il, les fonctions PHP file_get_contents() et fread() peut T'aider. Les file_get_contents() fonction renvoie une chaîne qui contient toutes les données du fichier téléchargé :

if (is_uploaded_file($_FILES['myFile']['tmp_name'])) 
    $fileData = file_get_contents($_FILES['myFile']['tmp_name']); 

Cela vous donnera une poignée sur le texte brut dans ce fichier. De là, vous devrez analyser le XML. J'espère que cela pourra aider!

Questions connexes