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

Discussion dans 'Administration d'un site Web' créé par totoaussi, 26 Août 2011.

  1. totoaussi
    totoaussi WRInaute discret
    Inscrit:
    22 Août 2010
    Messages:
    147
    J'aime reçus:
    0
    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.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 748
    J'aime reçus:
    20
    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 ?
     
  3. SaintAmand
    SaintAmand WRInaute discret
    Inscrit:
    1 Mars 2011
    Messages:
    90
    J'aime reçus:
    0
    Bonjour,

    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.
     
  4. SaintAmand
    SaintAmand WRInaute discret
    Inscrit:
    1 Mars 2011
    Messages:
    90
    J'aime reçus:
    0
    Pas forcément. Peut-être s'amuse t-il avec OpenStreetMap. Planet.osm c'est un gros XML de plus de 160 Go.
     
  5. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 837
    J'aime reçus:
    0
    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.