Je bosse sur un script de migration qui convertit les données d'une application V1 vers une application V2.
En gros, voilà ce que fait mon script :
CODE
<?php
// Sélectionne les données à migrer.
$res = mysql_query("SELECT * FROM table_v1");
// Parcourt les données...
while ($o = mysql_fetch_object($res)) {
// Crée un array destiné à stocker les données à migrer
$object = array();
$object['property1'] = $o->title;
$object['property2'] = $o->description;
// ici, déclare d'autres propriétés et effectue qq traitements.
// Enregistre le résultat.
mysql_query("INSERT INTO table_v2...");
}
?>
// Sélectionne les données à migrer.
$res = mysql_query("SELECT * FROM table_v1");
// Parcourt les données...
while ($o = mysql_fetch_object($res)) {
// Crée un array destiné à stocker les données à migrer
$object = array();
$object['property1'] = $o->title;
$object['property2'] = $o->description;
// ici, déclare d'autres propriétés et effectue qq traitements.
// Enregistre le résultat.
mysql_query("INSERT INTO table_v2...");
}
?>
Si je limite le nombre d'enregistrements du SELECT à quelques milliers, tout se passe sans problème.
Mais si je ne limite pas (or, ma table contient 3,5 millions d'enregistrements), le script plante en disant qu'il n'a plus de mémoire. J'ai pourtant déjà augmenté la memory_limit dans php.ini à 250M... Et quand on fait une boucle avec un mysql_fetch_object, j'imagine que les données sont remontées partiellement, au fur et à mesure, pas toutes en même temps, non ?
Y a-t-il une autre façon d'écrire ce script pour qu'il ne consomme pas autant de mémoire ?
Merci
