23-01-2013, 11:25 PM (Modification du message : 23-01-2013, 11:25 PM par niahoo.)
(23-01-2013, 06:46 PM)niahoo a écrit : T'ass essayé de tout mettre dans $xml et de faire un seul xmlfic() (bon, logiquement ça devraît être pire si c'est un problème de RAM, mais c'est pas obligé.
bon ben essaie ça on sait jamais, mais sinon il va te falloir mettre du débug pour voir l'utilisation de la RAM au fur et a mesure. Mais je suppose que ton XML doit pas non plus faire 1Mo quand même ?
C'est possible que deux requêtes essaient d'agir sur le même fichier en même temps ?
D'après le code, certains cas peuvent aboutir à l'appel du triplet fopen/fputs/fclose plusieurs fois dans la même page. Deux possibilités:
- fclose n'a pas le temps de bien se faire, car fopen est appelé trop vite (le script php va trop vite)
- l'hébergeur limite le nombre de fopen par script php (sur un mutualisé, ca se tient)
Dans ton cas, il vaudrait donc mieux procéder ainsi:
-Lire le XML existant si besoin, puis le fermer (via file ou f_gets_content)
- initialiser la variable $xml en début de code (avec le tag <?xml...?> dedans)
- remplir cette variable dans ton script, sans toucher au fichier XML réel
- sauver le fichier XML en fin de boucle, via file_puts_content
- détruire $xml
unlink est inutile. file_puts_content écrasera le fichier précédent.
Ton procédé consistant à sauver le fichier xml dans la boucle, via intermédiaire, est bien trop lourd et peut saturer ton accès au disque dur, ou générer des erreurs dus à la latence.