From c8b00bd774f34738de9191c4f28977e2e381b3a0 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Tue, 23 Jan 2007 18:26:14 +0000 Subject: [PATCH] backup en travaux, pas fonctionnel mais en bonne voie --- ecrire/action/export_all.php | 2 +- ecrire/exec/export_all.php | 21 +++++--- ecrire/inc/export.php | 99 ++++++++++++++++++------------------ 3 files changed, 65 insertions(+), 57 deletions(-) diff --git a/ecrire/action/export_all.php b/ecrire/action/export_all.php index 4452004c51..b2f5647b35 100644 --- a/ecrire/action/export_all.php +++ b/ecrire/action/export_all.php @@ -31,7 +31,7 @@ function action_export_all_dist() list($file, $nb) = split('/', $arg); $file = $dir . $file; - $files = ramasse_parties($file, $file, $nb, true); + //$files = ramasse_parties($file, $file, $nb, true); effacer_meta("status_dump"); ecrire_metas(); diff --git a/ecrire/exec/export_all.php b/ecrire/exec/export_all.php index b0951360a8..55048f8c63 100644 --- a/ecrire/exec/export_all.php +++ b/ecrire/exec/export_all.php @@ -93,13 +93,18 @@ function exec_export_all_dist() $status_dump = explode("::",$status_dump); ecrire_metas(); -// Au cas ou le dernier dump n'aurait pas ete acheve correctement + // Au cas ou le dernier dump n'aurait pas ete acheve correctement foreach(preg_files($file . ".part\.[0-9]*") as $dummy) @unlink($dummy); $reprise = ''; - } else $reprise = " (" . $status_dump[2] . ", " . $status_dump[3] . ")"; + // creer l'en tete du fichier + ecrire_fichier($dir.$archive, export_entete(),false,false); + + } + else + $reprise = " (" . $status_dump[2] . ", " . $status_dump[3] . ")"; list($tables_for_dump, $tables_for_link) = export_all_list_tables(); @@ -111,8 +116,12 @@ function exec_export_all_dist() // Pour avoir les valeurs de _DIR_IMG etc relatives a l'espace public // la phase finale de reunion des fichiers en un seul est faite la-bas $href = generer_action_auteur("export_all","$archive/$all",'',true); + + + ramasse_parties($dir.$archive, $dir.$archive); if ($etape_actuelle > $all){ // au timeout + ecrire_fichier($dir.$archive, export_enpied(),false,false); include_spip('inc/headers'); redirige_par_entete($href); } @@ -136,8 +145,8 @@ function exec_export_all_dist() if (!($timeout = ini_get('max_execution_time')*1000)); $timeout = 30000; // parions sur une valeur tellement courante ... if ($start) $timeout = round($timeout/2); - // script de rechargement auto sur timeout - echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"".generer_url_ecrire("export_all","archive=$archive&gz=$gz",true)."\";',$timeout);</script>\n"); + // script de rechargement auto sur timeout + //echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"".generer_url_ecrire("export_all","archive=$archive&gz=$gz",true)."\";',$timeout);</script>\n"); echo "<div style='text-align: left'>\n"; $etape = 1; @@ -157,15 +166,15 @@ function exec_export_all_dist() } if ($GLOBALS['flag_ob_flush']) ob_flush(); flush(); - $etape++; $sous_etape = 0; } + $etape++; } echo "</div>\n"; // si Javascript est dispo, anticiper le Time-out echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"$href\";',0);</script>\n"); echo install_fin_html(); - } +} // construction de la liste des tables pour le dump : // toutes les tables principales diff --git a/ecrire/inc/export.php b/ecrire/inc/export.php index defe85dc29..75031cff6b 100644 --- a/ecrire/inc/export.php +++ b/ecrire/inc/export.php @@ -31,30 +31,26 @@ function export_nom_fichier_dump($dir,$gz=true){ // prevenir autant que possible un Time-out. // http://doc.spip.org/@ramasse_parties -function ramasse_parties($archive, $partfile, $nb, $fin=''){ +function ramasse_parties($archive, $partfile, $files = array()){ - $files = array(); + $files_o = array(); + if (!count($files)) + $files = preg_files(dirname($archive)."/",basename($partfile).".part_[0-9]+_[0-9]+"); $ok = true; - if (!ecrire_fichier($archive,$fin ? export_entete() : '',false,false)) - $ok = false; - else { - for($cpt =1; $cpt <= $nb; $cpt++) { - if (file_exists($f = $partfile.".$cpt")) { - $contenu = ""; - if (lire_fichier ($f, $contenu)) { - if (!ecrire_fichier($archive,$contenu,false,false)) - { $ok = false; break;} - } - unlink($f); - $files[]=$f; - } - } + foreach($files as $f) { + $contenu = ""; + if (lire_fichier ($f, $contenu)) { + if (!ecrire_fichier($archive,$contenu,false,false)) + { $ok = false; break;} + } + unlink($f); + $files_o[]=$f; } if ($fin AND $ok) $ok = ecrire_fichier($archive, export_enpied(),false,false); - return $ok ? $files : false; + return $ok ? $files_o : false; } define('_EXPORT_TRANCHES_LIMITE', 400); @@ -72,11 +68,11 @@ define('_EXPORT_TRANCHES_LIMITE', 400); function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total) { global $tables_principales; - $debut = $cpt * _EXPORT_TRANCHES_LIMITE; - $filetable = $dir . $archive . '_' . $etape . '.'; + $filetable = $dir . $archive . '.part_' . sprintf('%3d',$etape); $prim = isset($tables_principales[$table]) ? $tables_principales[$table]['key']["PRIMARY KEY"] : ''; + $debut = $cpt * _EXPORT_TRANCHES_LIMITE; while (1){ // on ne connait pas le nb de paquets d'avance @@ -85,26 +81,29 @@ function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total // car les admins restreints peuvent parcourir // une portion de table vide pour eux. if ($string) { -// on ecrit dans un fichier generique -// puis on le renomme pour avoir une operation atomique - $cpt++; - ecrire_fichier ($filetable, $string); - rename($filetable,$filetable . $cpt); + // on ecrit dans un fichier generique + // puis on le renomme pour avoir une operation atomique + ecrire_fichier ($filetable . '.temp', $string); + // le fichier destination peut deja exister si on sort d'un timeout entre le rename et le ecrire_meta + if (file_exists($f = $filetable . sprintf('_%4d',$cpt))) @unlink($f); + rename($filetable . '.temp', $f); } - - $debut += _EXPORT_TRANCHES_LIMITE; - if ($debut >= $total) {break;} - echo " $debut"; - // on se contente d'une ecriture en base pour aller plus vite - // a la relecture on en profitera pour mettre le cache a jour + $cpt++; $status_dump = "$gz::$archive::$etape::$cpt"; + // on se contente d'une ecriture en base pour aller plus vite + // a la relecture on en profitera pour mettre le cache a jour ecrire_meta("status_dump", $status_dump,'non'); +//die(); + $debut = $cpt * _EXPORT_TRANCHES_LIMITE; + if ($debut >= $total) {break;} + echo " $debut"; } echo " $total."; - $filetable = $dir . $archive . '_' . $etape; - ramasse_parties($dir . $archive . ".$etape", $filetable, $cpt); + ramasse_parties($dir.$archive, $dir.$archive); $status_dump = "$gz::$archive::" . ($etape+1) . "::0"; + // on se contente d'une ecriture en base pour aller plus vite + // a la relecture on en profitera pour mettre le cache a jour ecrire_meta("status_dump", $status_dump,'non'); } @@ -120,28 +119,28 @@ function build_while($debut, $table, $prim) { $string = ''; while ($row = spip_fetch_array($result,SPIP_ASSOC)) { if ((!isset($row['impt'])) OR $row['impt']=='oui') { - if (!($ok = $connect_toutes_rubriques)) { - if (isset($row['id_rubrique'])) - $ok = autoriser('publierdans','rubrique',$row['id_rubrique']); - elseif (isset($row['id_article'])) - $ok = autoriser('modifier','article',$row['id_article']); - else $ok = true; + if (!($ok = $connect_toutes_rubriques)) { + if (isset($row['id_rubrique'])) + $ok = autoriser('publierdans','rubrique',$row['id_rubrique']); + elseif (isset($row['id_article'])) + $ok = autoriser('modifier','article',$row['id_article']); + else $ok = true; + } if ($ok) { $attributs = ""; - if ($chercher_logo) { - if ($logo = $chercher_logo($row[$prim], $prim, 'on')) - $attributs .= ' on="' . $logo[3] . '"'; - if ($logo = $chercher_logo($row[$prim], $prim, 'off')) - $attributs .= ' off="' . $logo[3] . '"'; - } - - $string .= "<$table$attributs>\n"; - foreach ($row as $k => $v) { - $string .= "<$k>" . text_to_xml($row[$k]) . "</$k>\n"; + if ($chercher_logo) { + if ($logo = $chercher_logo($row[$prim], $prim, 'on')) + $attributs .= ' on="' . $logo[3] . '"'; + if ($logo = $chercher_logo($row[$prim], $prim, 'off')) + $attributs .= ' off="' . $logo[3] . '"'; + } + + $string .= "<$table$attributs>\n"; + foreach ($row as $k => $v) { + $string .= "<$k>" . text_to_xml($row[$k]) . "</$k>\n"; } - $string .= "</$table>\n\n"; + $string .= "</$table>\n\n"; } - } } } spip_free_result($result); -- GitLab