Mammouth du PHP |
672 Messages
14 avr. 2010, 14:32
Bonjour.
C'est un besoin ponctuel, ou ça sera régulier ?
On peut voir ton code, ou au moins connaître la méthode utilisée ?
Quelques pistes :
- Suivant la BDD utilisée, il peut être possible d'importer le XML directement.
- Utilise XSL pour "transformer" ton XML en CSV.
- Utiliser xpath.
J'ai testé avec un "petit" fichier (15 Mo, 3700 articles) et ce script :
$doc = new DOMDocument;
$doc->Load('test.xml');
$xpath = new DOMXPath($doc);
$query = '//tests/test';
$entries = $xpath->query($query);
. Ce qui te bouffe de la mémoire, c'est quand tu fais le query.
Une solution pour contourner le problème : faire plusieurs query qui renvoient peu de résultat.
Dans l'idéal tu vas carrément travailler article par article :
for ($i = 1; $i <= $nbr_articles; $i++) {
// On va chercher uniquement l'article n° $i
$query = "//tests/test[position()=$i]";
$entries = $xpath->query($query);
// Traitement de l'article => Faire INSERT ou rajouter dans un CSV
}
Par contre, ça va prendre du temps => Gros risques de time out.
=> Augmenter le time-out, découper en tranches ou travailler en AJAX (appeler le script avec le n° à traiter en paramètre. Quand on a le retour, rappeler le script avec le n° suivant)