XML info error

Mammouth du PHP | 643 Messages

21 mai 2016, 15:34

Salut à tous.

J'essai de récupérer des infos vie un xml.
Et j'ai le message d'erreur suivant:

Warning: simplexml_load_file(): (null)(null)zxpd_201605210437_3467_31592008.xml:1: parser error : out of memory error in /home/users6/l/lasortie/www/integration.php on line 42

Warning: simplexml_load_file(): ockAmount>null</stockAmount><program>3467</program><extra1>ROMA</extra1><extra2> in /home/users6/l/lasortie/www/integration.php on line 42

Cette ligne correspond à mon appel du fichier, je sais que cette appel le problème vient pas de la.
Le fichier est lourd c'est du à ca ?

Mon code pour récupérer les infos: ( je ne vous met que l'essentiel pour facilité la copréhension du code )
$flux = simplexml_load_file('zxpd_201605210437_3467_31592008.xml'); // Source du flux.xml
	
	set_time_limit(0);

    $type  = array(     // Concert  
                        'POP|Pop-rock/Folk' => 10, '11P|Pop-Rock/Musique électronique' => 10, 
                         
                        // Spectacle
                        'TCL|Théâtre classique' => 11, 'TCO|Théâtre contemporain' => 11,
											
                         
                     8, '131F|Cinéma' => 18,  '13CI|Cinéma' => 18, 'ROC|Retransmission Opéra/Concert ;' => 18, 'ROC|Retransmission Opéra/Concert;' => 18, '81F|Cinéma' => 18, '8CI|Cinéma' => 18,
                        );
	
	                       
    // On entre les entrees en bdd 
	function multiexplode ($delimiters,$string) {
   
    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
	}                
    foreach ($flux->product as $item) {
		

    // Récupération des données en fonction du tagname du XML
	$number = addslashes($item->number);
    $titre = addslashes($item->name);
    $price = $item->price;
    $url_fnac = $item->deepLink;
	$date_debut_sortie = $item->validFrom;
    $date_fin_sortie = $item->validTo;
    $street = addslashes($item->terms);
    $photo = $item->largeImage;
    $genre = $item->merchantCategoryPath;
	$manufacturer = addslashes($item->manufacturer);

Eléphanteau du PHP | 25 Messages

21 mai 2016, 16:48

Bonjour,

Vu l'erreur c'est effectivement un manque de mémoire.

A court terme on peut augmenter la mémoire allouée à PHP.
Pour changer la limite de mémoire en général il faut configurer memory_limit dans php.ini.
Sinon pour modifier la mémoire allouée uniquement pour le script on peut utiliser :

Code : Tout sélectionner

ini_set('memory_limit','16M');
Une solution plus viable sur le long terme, s'il y a peu de mémoire disponible ou que la taille des futurs fichiers est difficile à prévoir, est d'utiliser XMLReader à la place de simplexml.

Contrairement à simplexml XMLReader ne charge tout le fichier en mémoire.

La doc est disponible là : https://secure.php.net/manual/fr/book.xmlreader.php

Bonne journée