From 973be34995ef9edcf6020299ee40763fefca0fc1 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Mon, 22 Jan 2007 21:12:59 +0000 Subject: [PATCH] =?UTF-8?q?Pourquoi=20faire=20simple=20quand=20on=20peut?= =?UTF-8?q?=20faire=20compliqu=C3=A9:=20depuis=20la=20nuit=20des=20temps?= =?UTF-8?q?=20SPIP=20faisait=20une=20requete=20mysql=5Ffield=5Fname=20pour?= =?UTF-8?q?=20exporter=20une=20table=20alors=20que=20le=20spip=5Ffetch=5Fa?= =?UTF-8?q?rray=20qui=20suit=20contient=20aussi=20ces=20informations.=20Et?= =?UTF-8?q?=20un=20peu=20plus=20de=20lisibilit=C3=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/exec/export_all.php | 11 ++++------- ecrire/inc/export.php | 34 +++++++++++++--------------------- 2 files changed, 17 insertions(+), 28 deletions(-) diff --git a/ecrire/exec/export_all.php b/ecrire/exec/export_all.php index 9a05e2bc3e..a6f43b1913 100644 --- a/ecrire/exec/export_all.php +++ b/ecrire/exec/export_all.php @@ -142,8 +142,6 @@ function exec_export_all_dist() echo "<div style='text-align: left'>\n"; $etape = 1; foreach($tables_for_dump as $table){ - - $liens = $tables_for_link[$table]; if ($etape_actuelle <= $etape) { $r = spip_query("SELECT COUNT(*) FROM $table"); $r = spip_fetch_array($r, SPIP_NUM); @@ -151,14 +149,13 @@ function exec_export_all_dist() echo "\n<br /><strong>",$etape, '. ', $table,"</strong> "; if (!$r) echo _T('texte_vide'); else { - $cpt = export_objets($table, $liens, $etape, $sous_etape,$dir, $archive, $gz, $r); - $filetable = $dir . $archive . '_' . $etape; - ramasse_parties($dir . $archive . ".$etape", $filetable, $cpt); + $liens = $tables_for_link[$table]; + export_objets($table, $liens, $etape, $sous_etape,$dir, $archive, $gz, $r); } + if ($GLOBALS['flag_ob_flush']) ob_flush(); + flush(); $etape++; $sous_etape = 0; - $status_dump = "$gz::$archive::" . $etape . "::0"; - ecrire_meta("status_dump", $status_dump,'non'); } } echo "</div>\n"; diff --git a/ecrire/inc/export.php b/ecrire/inc/export.php index c07a7e243c..a7ded7c451 100644 --- a/ecrire/inc/export.php +++ b/ecrire/inc/export.php @@ -61,8 +61,9 @@ define('_EXPORT_TRANCHES_LIMITE', 400); // La constante ci-dessus determine la taille des tranches, // chaque tranche etant copiee immediatement dans un fichier // et son numero memorisee dans le serveur SQL. -// En cas d'abandon sur Time-out, le travail pourra ainsi avancer -// charge a l'appelant de coller tous les morceaux de 1 a N +// En cas d'abandon sur Time-out, le travail pourra ainsi avancer. +// Au final, on regroupe les tranches en un seul fichier +// et on memorise dans le serveur qu'on va passer a la table suivante. // http://doc.spip.org/@export_objets function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total) { @@ -73,9 +74,6 @@ function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total while (1){ // on ne connait pas le nb de paquets d'avance - if ($GLOBALS['flag_ob_flush']) ob_flush(); - flush(); - $string = build_while($debut, $table); // attention $string vide ne suffit pas a sortir // car les admins restreints peuvent parcourir @@ -95,9 +93,14 @@ function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total // a la relecture on en profitera pour mettre le cache a jour $status_dump = "$gz::$archive::$etape::$cpt"; ecrire_meta("status_dump", $status_dump,'non'); + } echo " $total."; - return $cpt; + $filetable = $dir . $archive . '_' . $etape; + ramasse_parties($dir . $archive . ".$etape", $filetable, $cpt); + $status_dump = "$gz::$archive::" . ($etape+1) . "::0"; + ecrire_meta("status_dump", $status_dump,'non'); + } // Construit la version xml des champs d'une table @@ -109,27 +112,16 @@ function build_while($debut, $table) { static $table_fields=array(); $result = spip_query("SELECT * FROM $table LIMIT $debut," . _EXPORT_TRANCHES_LIMITE); - // Recuperer les noms des champs - // Ces infos sont donnees par le abstract_showtable - // les instructions natives mysql ne devraient pas apparaitre ici - if (!isset($table_fields[$table])){ - $nfields = mysql_num_fields($result); - for ($i = 0; $i < $nfields; ++$i) - $table_fields[$table][$i] = mysql_field_name($result, $i); - } else $nfields = count($table_fields[$table]); $string = ''; - - $all = $connect_toutes_rubriques - ||(!in_array('id_rubrique',$table_fields[$table])); - while ($row = spip_fetch_array($result,SPIP_ASSOC)) { if ((!isset($row['impt']) OR $row['impt']=='oui') - AND ($all OR autoriser('publierdans','rubrique',$row['id_rubrique']))) { + AND ($connect_toutes_rubriques + OR !isset($row['id_rubrique']) + OR autoriser('publierdans','rubrique',$row['id_rubrique']))) { $attributs = ""; $string .= "<$table$attributs>\n"; - for ($i = 0; $i < $nfields; ++$i) { - $k = $table_fields[$table][$i]; + foreach ($row as $k => $v) { $string .= "<$k>" . text_to_xml($row[$k]) . "</$k>\n"; } $string .= "</$table>\n\n"; -- GitLab