Question

Pour un nouveau projet, je dois charger de gros fichiers XML (200Mo + de) à une base de données mySQL. Il y a + - 20 flux je dois correspondre à ce que (tous les champs sont les mêmes)

.

Maintenant, quand je veux attraper le XML que je reçois cette erreur:

Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 171296569 bytes) in E:\UsbWebserver\Root\****\application\libraries\MY_xml.php on line 21

Y at-il une solution facile pour cela? Il est impossible d'obtenir dans certaines parties de te alimentation chacun de quelques Mo.

Merci beaucoup!

P.s. a quelqu'un une idée de faire correspondre des flux XML-facile?

Était-ce utile?

La solution

Cela devrait corriger:

ini_set('memory_limit', -1);

Autres conseils

Si vous devez analyser de gros fichiers xml (ou de gros fichiers en général), il est une meilleure stratégie pour écrire une fonction à base de flux que celui qui exige que tout soit en mémoire en même temps. PHP a une classe appelée XmlReader , qui vous permet de numériser à travers un fichier, un seul noeud à la fois. Il ne peut pas être trivial de changer votre code pour l'utiliser, mais vous pourriez envisager de faire le changement.

J'ai écrit un entrée de blog à ce sujet il y a un certain temps. La solution était d'utiliser XmlReader pour lire des morceaux de XML dans un objet et faire des choses avec elle alors.

Ajouter ini_set ( 'memory_limit', '150Mo') dans votre script.

PHP est la seule langue de programmation que vous envisagez pour le travail? Si vous utilisez Java, alors il existe des moyens plus efficaces pour charger et XML ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top