cvex $CveX | Oui c'est bien ce que je pensais (lol).
Heuresement que j'ai pas précisé que c'était en local ! (Pour l'instant, juste le temps du développement).
omega2 > "Si ton systéme est vraiment trop trop long, alors tu devras faire table par table, mais tu n'es pas obligé de demander au client de cliquer à chaque fois dans son navigateur pour lancer l'exportation suivante : un navigateur est capable d'appeller une autre page quand le serveur lui dit d'aller voir ailleur. Utilise donc les redirections pour que le navigateur appelle succéssivement les pages servant à exporter toutes les tables."
=> Oui, c'est ce que j'ai finalement fait mais encore ce problème de temps d'execution beaucoup trop long pour les tables qui on plus de 10 000 enregistrements.
Voici un exemple de ce que j'utilise pour réaliser l'exportation entre 2 bases MySQL :
transfere_db.php
Code :
- <?php
- include("maj_tables.php" );
- if(empty($_POST['etape']))
- {
- $_POST['etape'] = 1;
- //Vidage des tables
- vidage_table();
- }
- $execution_tot = 0;
- ?>
- <html>
- ...
- ...
- ...
- <table align="center">
- <?php
- switch($_POST['etape'])
- {
- case 1 :
- //Table "absencespersonnel"
- $tab_abspersonnel = table_absencespersonnel();
- if($tab_abspersonnel[1] == "ok" )
- {
- echo "<tr><td>".$tab_abspersonnel[0]." -> Temps d'execution : <b>".$tab_abspersonnel[2]."</b> seconde(s).</td>";
- echo "<td align='center'>[ <a class='ok'>OK</a> ]</td></tr>";
- }
- else
- {
- echo "<tr><td>Une erreur est survenue sur la ".$tab_abspersonnel[0]."</td>";
- echo "<td rowspan=2 align='center'>[ <a class='echec'>Echec</a> ]</td></tr>";
- echo "<tr><td class='contour_erreur'><i><u>Détail de l'erreur :</u></i><p>".$tab_abspersonnel[3]."</p></td>";
- echo "<td></td></tr></table>";
- exit();
- }
- echo "<form action='' method='post'>
- <input type='hidden' name='etape' value='2'>
- <input type='hidden' name='tmp_exec' value='".$execution_tot = $execution_tot + $tab_abspersonnel[2]."'>
- <input type='submit' name='etape_suiv' value='Etape 2 >'>
- </form>";
- break;
- case 2 :
- ...
- ...
- ...
- break;
- case 80 :
- ...
- ...
- ...
- break;
- }
- ?>
- ...
- ...
- ...
- </html>
|
maj_tables.php
Code :
- function table_absencespersonnel()
- {
- set_time_limit(300);
- //Démarrage du chrono
- $temps = microtime();
- $temps = explode(' ', $temps);
- $debut = $temps[1] + $temps[0];
- //Déclaration des variables de connexion
- $base1 = array();
- $base2 = array();
- $base1 = connexion_db1();
- $base2 = connexion_db2();
- //Connexion à l'ancienne base de données
- $linkdb1 = mysql_connect($base1['serv'], $base1['nomutil'], $base1['mdp']);
- if(!$linkdb1) { $erreur = "<b>Impossible de se connecter à l'ancienne base de donnée.</b>"; }
- if(!mysql_select_db($base1['nombase'], $linkdb1)) { $erreur = "<b>Impossible de selectionner l'ancienne base de donnée.</b>"; }
- $sql_absence_personnel = mysql_query("SELECT idAbsence, numeroMatricule, dateDebutPersonnel, dateFinPersonnel, nombreJour, nombreHeure, observation, motif, idAction FROM absence_personnel", $linkdb1);
- if(!$sql_absence_personnel) { $erreur = "<b>Erreur de lecture de la table \"absence_personnel\".</b><br />".$sql_absence_personnel."<br />".mysql_error(); }
- //Connexion à la nouvelle base de données
- $linkdb2 = mysql_connect($base2['serv'], $base2['nomutil'], $base2['mdp']);
- if(!$linkdb2) { $erreur = "<b>Impossible de se connecter à la nouvelle base de donnée.</b>"; }
- if(!mysql_select_db($base2['nombase'], $linkdb2)) { $erreur = "<b>Impossible de selectionner la nouvelle base de donnée.</b>"; }
- //Migration des données dans la nouvelle table
- while($absence_personnel = mysql_fetch_row($sql_absence_personnel))
- {
- $sql = "INSERT INTO absencespersonnel (IdAbsencesPersonnel, IdPersonnel, DateDebutAbsence, DateFinAbsence, NombreJoursAbsence, NombreHeuresAbsence, Motif, Observations, IdAction) VALUES ('".$absence_personnel[0]."', '".$absence_personnel[1]."', '".$absence_personnel[2]."', '".$absence_personnel[3]."', '".$absence_personnel[4]."', '".$absence_personnel[5]."', '".addslashes($absence_personnel[7])."', '".addslashes($absence_personnel[6])."', '')";
- if(!mysql_query($sql, $linkdb2)) { $erreur = "<b>Erreur intégration de la donnée dans la table \"absencespersonnel\".</b><br />".$sql."<br />".mysql_error(); }
- }
- mysql_close($linkdb1);
- mysql_close($linkdb2);
- //Fin du chrono
- $temps = microtime();
- $temps = explode(' ', $temps);
- $fin = $temps[1] + $temps[0];
- $temps_exec = round(($fin - $debut),2);
- //Valeur à retourner
- if(empty($erreur))
- {
- return(array("Table \"<b>absencespersonnel\"</b>", "ok", $temps_exec));
- }
- else
- {
- return(array("Table \"<b>absencespersonnel\"</b>", "echec", $temps_exec, $erreur));
- }
- }
- function...
- ...
- ...
- ...
|
PS : Pour un soucis de clareté, je n'est pas inclus les autres fonctions et j'ai présenté la migration d'une seule table. ^^ Message édité par cvex le 12-01-2007 à 14:42:23 ---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
|