example - PHP cURL, extraire une réponse XML




post header (6)

non, CURL n'a rien avec l'analyse XML, il ne sait rien du contenu retourné. il sert de proxy pour obtenir du contenu. c'est à vous de décider quoi en faire.

utilisez JSON si possible (et json_decode) - il est plus facile de travailler avec, sinon, utilisez une bibliothèque XML pour parsin telle que DOMXML: http://php.net/domxml

J'appelle la méthode PHP cURL sur un serveur et la réponse est de type XML. cURL enregistre la sortie (après avoir supprimé les balises) dans une variable de type scalaire. Y a-t-il un moyen de le stocker dans un objet / hash / array pour qu'il soit facile à analyser?


<?php
function download_page($path){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$path);
    curl_setopt($ch, CURLOPT_FAILONERROR,1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $retValue = curl_exec($ch);          
    curl_close($ch);
    return $retValue;
}

$sXML = download_page('http://alanstorm.com/atom');
$oXML = new SimpleXMLElement($sXML);

foreach($oXML->entry as $oEntry){
    echo $oEntry->title . "\n";
}

simple fichier XML de chargement ..

$xml = @simplexml_load_string($retValuet);

$status = (string)$xml->Status; 
$operator_trans_id = (string)$xml->OPID;
$trns_id = (string)$xml->TID;

?>


Exemple:

<songs>
<song dateplayed="2011-07-24 19:40:26">
    <title>I left my heart on Europa</title>
    <artist>Ship of Nomads</artist>
</song>
<song dateplayed="2011-07-24 19:27:42">
    <title>Oh Ganymede</title>
    <artist>Beefachanga</artist>
</song>
<song dateplayed="2011-07-24 19:23:50">
    <title>Kallichore</title>
    <artist>Jewitt K. Sheppard</artist>
</song>

puis:

<?php
$mysongs = simplexml_load_file('songs.xml');
echo $mysongs->song[0]->artist;
?>

Sortie sur votre navigateur: Ship of Nomads

crédits: http://blog.teamtreehouse.com/how-to-parse-xml-with-php5


$sXML = download_page('http://alanstorm.com/atom');
// Comment This    
// $oXML = new SimpleXMLElement($sXML);
// foreach($oXML->entry as $oEntry){
//  echo $oEntry->title . "\n";
// }
// Use json encode
$xml = simplexml_load_string($sXML);
$json = json_encode($xml);
$arr = json_decode($json,true);
print_r($arr);

Erreur fatale: La taille de la mémoire autorisée de XXX octets est épuisée (tentative d'allocation de XXX octets)

Il n'y a pas assez de mémoire pour exécuter votre script. PHP a atteint la limite de mémoire et arrête de l'exécuter. Cette erreur est fatale, le script s'arrête. La valeur de la limite de mémoire peut être configurée dans le fichier php.ini ou en utilisant ini_set('memory_limit', '128 M'); dans le script (qui écrasera la valeur définie dans php.ini ). Le but de la limite de mémoire est d'empêcher un seul script PHP d'engloutir toute la mémoire disponible et de faire tomber tout le serveur web.

La première chose à faire est de minimiser la quantité de mémoire dont votre script a besoin. Par exemple, si vous lisez un fichier volumineux dans une variable ou que vous extrayez plusieurs enregistrements d'une base de données et que vous les stockez tous dans un tableau, cela peut nécessiter beaucoup de mémoire. Changez votre code pour lire à la place le fichier ligne par ligne ou récupérer les enregistrements de base de données un à la fois sans les stocker tous en mémoire. Cela nécessite un peu de conscience conceptuelle de ce qui se passe dans les coulisses et quand les données sont stockées dans la mémoire par rapport à d'autres.

Si cette erreur se produisait lorsque votre script n'effectuait pas de travail nécessitant beaucoup de mémoire, vous devez vérifier votre code pour voir s'il y a une fuite de mémoire. La fonction memory_get_usage est votre ami.

Questions connexes:

  • Tous "Erreur fatale: La taille de la mémoire autorisée de XXX octets est épuisée" Questions sur




php curl