Salut,
Est-il possible de scanner (ou de construire) un fichier XML sans placer son contenu en mémoire ?
A priori XMLReader, ou XML serait plus aproprié que simpleXML pour ton problème.
cf
http://fr2.php.net/manual/fr/ref.xmlreader.php
http://fr2.php.net/manual/fr/ref.xml.php
Ce sont deux parseurs qui analysent le fllux au fur et à mesure. Ce que dom ne fait pas (simpleXML à l'air de fonctionner comme DOM, mais pas moyen d'avoir la confirmation dans la doc...). Puisque celui ci charge l'intégralité du document, l'analyse et enfin te fournit un objet pour travailler avec ton document XML.
Mettons que je réduise le memory_limit de 500M à 32M. Quand le script Php aura besoin de plus (ce sera ici le cas), va-t'il y a voir un plantage ou Php va-t'il ruser (en utilisant le DD pour compenser par exemple) ?
Malheureusement non. PHP n'à pas la charge de ce type d'opération. la swap est réalisé de manière transparente par le système afin de palier le manque de mémoire vive dispo.
Donc une fois dépassé la limite, c'est fichu. Que se soit de la swap ou non.
Ma méthodologie, mes fonctions utilisées sont-elles mauvaises ?
Mauvaise, non, sa a fonctionné pendant un temps.
Par contre elle semble inadapté à tes nouveaux besoins, c'est certain.
Et vous, pour ce genre d'opération d'export, vous faites comment, vous ?
Je n'ai personnellement jamais rencontré ce genre de problèmatique jusqu'à présent. En tout cas pas au point de saturer la mémoire à un tel point.
Mais par rapport à ce que décris ton poste, le flux xml à fournir semble être sauvegarder dans un objet, ou une chaine.
Et lorsque le flux est complétement généré, il est alors écrit dans un fichier.
Par rapport à cela, peut être pourrais tu écrire plus souvent dans ton fichier afin de libérer la mémoire.
Et puis comme je te le proposais plus haut utiliser XMLReader.
Sinon une solution comme une autre, mais qui ne me semble pas très perreine.
ini_set("memory_limit",-1);
bye
Partager