Bonjour à tous,

Voilà, j'ai un petit problème.
J'ai 33000 enregistrements dans une table voiture que je dois migrer dans une table vehicule. Bien entendu, j'ai un traitement à réaliser pour chaque ligne de ma table voiture pour qu'elle rentre dans la table vehicule.

Pour faire cela, j'ai une page php avec un script ajax qui appelle un autre script php (je fais de l'ajax quoi).

Au début, j'avais mis le traitement de toutes les lignes dans le script de migration en php mais il y a tellement de ligne que je dépasse le temps d'exécution de 60 sec (je ne peux pas le changer car en prod, je ne peux pas utiliser set_time_limit())

Donc, j'ai décidé de mettre en place une fonction Ajax qui me permettrait de lancer mon script de migration à chaque ligne.

Je lance mon traitement avec ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<a href="javascript:DoMigration(0);">
  <img src="run.gif"/>
</a>
voici ma fonction javascript :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function DoMigration(currentId)
{
 var xhr_object = GetXHR();
 var no_cache = Math.random();
 
 if (encodeURIComponent(currentId) != "")
 {
  var sendData = "idVoiture=" + encodeURIComponent(currentId) + "&nocache=" +no_cache;
 
  xhr_object.open('post', 'migrVoiture.php',true);
  xhr_object.onreadystatechange = function()
  {
   if(xhr_object.readyState == 4)
   {	
    if(xhr_object.responseText != 'FIN')
    {
     document.getElementById('divInfo').innerHTML = xhr_object.responseText;
     DoMigration(xhr_object.responseText);
    }
   }
  }
 
  xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhr_object.send(sendData);
 }
}
Et voici me code de mon script de migration (enfin une toute petite partie)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
require_once('../authcheck.php');
require_once('../Connexion/lbconnex.php');
 
if ($_SESSION['profil']== "1")
{
 $projet = mysql_connect($hostname_projet, $username_projet, $password_projet) or trigger_error(mysql_error(),E_USER_ERROR);
 mysql_select_db($database_projet, $projet);
 
 $queryVoiture = "SELECT * FROM `voiture` WHERE `id` > ".$_POST['idVoiture']." ORDER BY fr_id LIMIT 1";
 $rsQueryVoiture = mysql_query($queryVoiture, $projet) or die(mysql_error());
 
 if (mysql_num_rows($rsQueryVoiture) > 0)
 {
  while($rowVoiture = mysql_fetch_array($rsQueryVoiture))
  {
   $queryGetNewId = "SELECT new_id FROM migIdVoitureVehicule WHERE code_ve = '".$rowOldFiche['code_voiture']."'";
   $rsquerySelectNewId =  mysql_query($queryGetNewId , $projet) or die(mysql_error());
   $rowId = mysql_fetch_array($rsquerySelectNewId, MYSQL_NUM);
   $queryInsert = "INSERT INTO vehicule (id_code) VALUES('".$rowId[0]."')";
   mysql_query($queryInsert, $projet) or die(mysql_error());
   echo $rowVoiture ['id'];
  }
 }
 else
  echo "FIN";
 
 mysql_close($projet);
}
else
 echo 'Vous n\'avez pas le droit d\'utiliser cette fonction.';
?>
Et donc, là, je fais une petite partie de mon traitement pour l'id en cours et ensuite, je retourne cette id à la page pour que la fonction AJAX lance la suivante.

Hélas, lorsque je lance ce bout de code, et bien IE6 prend 400Mo de mémoire et je peux plus rien faire d'autre.

Alors si vous avez des idées pour m'aider, je suis preneur.

Merci de votre aide.