Parser un SUPER fichier xml zippé(.gz)!

alifarah7 Messages postés 7 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 26 février 2008 - 22 févr. 2008 à 19:07
cs_anisis Messages postés 1 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 3 mars 2009 - 16 févr. 2009 à 14:53
Bonjour,


et excusez moi pour le derangement


J'ai un fichier que je reçois chaque jour d'une société et qui contient leur flux rss contenant leurs produits, prix, categorie ....
le problème qu'il m'envoient ce fichier zippé (.gz) avec une taille incroyable 600 Méga car le fichier xml d'origine est de 5 Go !!!!
J'ai essayé de lire le fichier .gz directement ça n'a pas marché, j'ai essayé de le dézipper avnant de l'exploiter ça a bloqué le serveur sans ouvrir même le .gz avec gzopen()...je ne peux pas faire l'extraction manuellement car je fais un site dynamique qui doit faire tt automatiquement par les cron.


Je sais pas si quelqu'un de vous a déjà été ds un tel prob...
Je vx soit une façon de lire le .gz directement soit n'importe quelle idée qui me resolve le prob !!!!
Merci d'avance

8 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
22 févr. 2008 à 19:24
Hello,

tu ne t'en sortiras pas en php.
A vrai dire, un fichier de 5go, j'aimerais bien savoir comment, eux, ils l'exploitent...quel que soit le langage.
Je ne sais pas ce que tu dois faire de ce fichier...mais à mon avis, tu dois faire appel au shell : décompresser l'archive via le shell, puis découper le fichier.
Ensuite, tu pourras exploiter les petits fichiers en php.

Ceci dit...ils changent tous les jours tout leur catalogue, la société en question...? Ou est-ce simplement que leurs informaticiens sont incapables de faire une mise à jour différentielle...parce qu'un nouveau catalogue xml de 5go par jour, je n'y crois absolument pas, moi.
0
alifarah7 Messages postés 7 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 26 février 2008
22 févr. 2008 à 19:49
Merci pour ta reponse malalam :)
pour ce qui concerne la société en question c la fameuse buy.com et les fichiers de 5Go ils ne comportent que les informations differencielles!!! mais eux ils m'envoient un fichier .gz de 600Méga de taille et en plus chaque jour!!!

pour ta solution de shell je pense que ça serait une bonne idée mais j'ai besoin de plus de details car j'ai jamais utilisé cette fonctionnalité...et en plus est ce que mon fichier xml conserverait t'il son format aprés decompression'et en cas de decompression tu penses que shell serait intelligent et ne couperais t'il pas de n'importe où dans n'importe quel balise?

Merci infiniment malalam
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
22 févr. 2008 à 20:39
Pour la décompression, je crois que c'est
tar -xtvf nom_du_fichier
un truc dans le genre, je me mélange tjrs les pinceaux avec les options.

Le shell ne fera que ce que tu lui demandes, à toi de coder un petit batch shell  pour découper correctement ton xml (et ajouter à chaque fichier un en-tête correct, évidemment).
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 févr. 2008 à 01:35
mais si c'est faisable :)

la decompression doit se faire ailleur que dans php, ensuite, faut lire par blocs, et traiter "tout ce qu'on peut traiter", avant de lire le bloc suivant (en evitant de garder des choses en memoire)

c'est clair qu'un file_get_contents ou autre, tu peux oublier...

les parseurs xml classiques sont a oublier aussi... tu vas devoir te faire un truc pour gerer un "flux", et un truc pour gerer ton parsing xml du "flux"

je te conseille des langages compiles pour ca, ou au moins compiles en bytecode, mais en php c'est faisable...

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
23 févr. 2008 à 09:55
L'analyse d'un tel fichier devrait être possible avec php, mais il faut choisir le bon type de d'analyseur xml.

Il existe deux familles de parsers :

- les parsers hierarchiques qui construisent en mémoire un arbre DOM du fichier xml. Ils doivent pouvoir charger la totalité du fichier en mémoire pour construire l'arbre.
- les parsers évènementiels qui répondent à des évènements au cours de la lecture du fichier qui se fait par morceau. Le fichier n'est pas chargé intégralement en mémoire. (API SAX)

Pour un fichier de 5Go, seuls les parsers évènementiels pourront le gérer : http://fr3.php.net/xml

Pour la décompression, je ne crois pas non plus que php sera capable de gérer un tel fichier. La solution sera de lancer la décompression soit manuellement, soit par cron, mais effictivement dans un environnement de type shell.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 févr. 2008 à 11:16
Hello,

le problème ne vient pas de si on pourrait ou pas lire un tel fichier. Le problème est que php gère très mal la mémoire : même s'il faisait du "ligne à ligne" (entre guillemete, on parle de xml là hein), je doute fort qu'il soit capable de désallouer suffisemment de mémoire à chaque "itération" pour aller au bout. Même en l'aidant au maximum.
Mais bon...ça ne coûte rien d'essayer.
0
alifarah7 Messages postés 7 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 26 février 2008
26 févr. 2008 à 16:19
Merci pourr vos suggextions, j'ai essayé les parsers evenementiels ligne par ligne mais ça marche pas mais maintenant j'essaye de mettre en oeuvre une solution perl car perl peux en même temps compresser les .gz facilement et peux lire ligne par ligne le fichier xml....
l'essai de cette solution est en cours (excusez moi pour ce retard  pour repondre car je travaille pas sur un seul projet et celui ci est en priorité basse) et je vais vous mettre au courant pour le resultat

Merci tous pour votre interêt
0
cs_anisis Messages postés 1 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 3 mars 2009
16 févr. 2009 à 14:53
bonjour,
en fait je suis tombé dans un cas pareil que le votre sauf que pour moi j'arrive pas à atteindre les Go , bref je reçoie au quotidien des flux xml de taille variées ( entre 30 Mo et 100 Mo) compressé (.rar ) qui contient les produits et leur prix et que je dois les parser et mettre à jour ma base . c'est à dire je cherche une methode de décompression en ligne (en php si c'est possible) et comme ça je peux les parser.
J'espère que mon problème est clair pour vous et que vous pourriez m'aider à trouver le chemin pour la solution.
Merci d'avance.
0
Rejoignez-nous