Problème de parsage d'un gros fichier xml de 12 Go

WRInaute discret
Bonjour,

je cherche à parser un fichier xml de 12 Go. Et je le fait en ligne de commande avec la commande php sous un serveur linux de 4Go de RAM avec un core2Duo de 2,5Ghz.

Cependant, la fonction @simplexml_load_file("fichier.xml") semble avoir des limites,

car le script de parsage s'intérrompt en affichant "Processus arreté".

Pourtant au début de mon script, j'ai mis ces lignes :

ini_set('max_execution_time','0');
ini_set('memory_limit','-1');

mais ça ne change rien.

Savez-vous d'où vient le problème ?

Merci d'avance, cordialement.
 
WRInaute accro
Un fichier XML de 12 Go 8O
Il n'y a pas comme un petit problème de conception depuis le début de l'application ?
 
WRInaute discret
Bonjour,

totoaussi a dit:
Cependant, la fonction @simplexml_load_file("fichier.xml") semble avoir des limites.

Savez-vous d'où vient le problème ?

Je ne connais pas ton SimpleXML, mais vu son nom, j'imagine qu'il utilise l'API DOM, et que la fonction simplexml_load_file charge le fichier en mémoire, n'est-ce-pas ? Auquel cas, il n'est pas étonnant que cela plante.

Pour des fichiers de cette taille, il te faut utiliser un parser qui utilise l'API SAX. Il permet d'analyser ton fichier comme un flux sans avoir besoin de le charger complètement en mémoire.
 
WRInaute discret
spout a dit:
Un fichier XML de 12 Go 8O
Il n'y a pas comme un petit problème de conception depuis le début de l'application ?

Pas forcément. Peut-être s'amuse t-il avec OpenStreetMap. Planet.osm c'est un gros XML de plus de 160 Go.
 
WRInaute passionné
A mon avis, tu vas devoir le faire avec "autre chose" que PHP, en perl par exemple...
Est-ce que tu as des erreurs pour ton script :
Code:
ini_set('display_errors', 1);
error_reporting(E_ALL);
Ca pourrait peut-être déjà te donner des pistes.
 
Discussions similaires
Haut