Skip to content
Extraits de code Groupes Projets
Valider 9516528f rédigé par esj's avatar esj
Parcourir les fichiers

bon, bah il y avait encore un cas d'admin restreint qui empechait le dump de...

bon, bah il y  avait encore un cas d'admin restreint qui empechait le dump de se terminer ([8479]). On va peut-etre finir par y arriver.
parent 6c799eb8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -20,7 +20,7 @@ include_spip('inc/minipres'); ...@@ -20,7 +20,7 @@ include_spip('inc/minipres');
function action_export_all_dist() function action_export_all_dist()
{ {
global $connect_toutes_rubriques ; global $connect_toutes_rubriques ;
$securiser_action = charger_fonction('securiser_action', 'inc'); $securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action(); $arg = $securiser_action();
...@@ -29,31 +29,28 @@ function action_export_all_dist() ...@@ -29,31 +29,28 @@ function action_export_all_dist()
if ($connect_toutes_rubriques AND file_exists(_DIR_DUMP)) if ($connect_toutes_rubriques AND file_exists(_DIR_DUMP))
$dir = _DIR_DUMP; $dir = _DIR_DUMP;
list($archive, $action) = split('/', $arg); list($quoi, $gz, $archive) = split(',', $arg);
# var_dump($file);
# var_dump($action);
$file = $dir . $archive; $file = $dir . $archive;
# var_dump($file); spip_log("action $arg $file");
#die();
include_spip('inc/meta'); include_spip('inc/meta');
if ($action=='start'){ if ($quoi =='start'){
// ecrire le debut du fichier // creer l'en tete du fichier et retourner dans l'espace prive
include_spip('inc/export'); include_spip('inc/export');
ecrire_fichier($file, export_entete(),false); if (ecrire_fichier($file, export_entete(),false)) {
lire_metas();
$status_dump = explode("::",$GLOBALS['meta']["status_dump"]);
$gz = $statut_dump[0];
// ca demarre
ecrire_meta("status_dump", "$gz::$archive::1::0",'non');
ecrire_metas();
// retour a la case depart pour vraiment faire le dump ecrire_meta("status_dump", "$gz::$archive::1::0",'non');
include_spip('inc/headers'); ecrire_metas();
redirige_par_entete(_request('redirect')); include_spip('inc/headers');
} redirige_par_entete(generer_url_ecrire('export_all'));
elseif($action=='end'){ } else {
echo "<p>",
_T('avis_erreur_sauvegarde',
array('type'=>'.', 'id_objet'=>'. .')),
"</p>\n";
exit;
}
}elseif ($quoi=='end'){
effacer_meta("status_dump"); effacer_meta("status_dump");
ecrire_metas(); ecrire_metas();
......
...@@ -59,8 +59,6 @@ $GLOBALS['flag_ob_flush'] = function_exists('ob_flush'); ...@@ -59,8 +59,6 @@ $GLOBALS['flag_ob_flush'] = function_exists('ob_flush');
function exec_export_all_dist() function exec_export_all_dist()
{ {
global $connect_toutes_rubriques; global $connect_toutes_rubriques;
$gz = _request('gz');
$redirect = generer_url_ecrire("export_all","gz=$gz",true);
if ($connect_toutes_rubriques AND file_exists(_DIR_DUMP)) if ($connect_toutes_rubriques AND file_exists(_DIR_DUMP))
$dir = _DIR_DUMP; $dir = _DIR_DUMP;
...@@ -71,74 +69,49 @@ function exec_export_all_dist() ...@@ -71,74 +69,49 @@ function exec_export_all_dist()
$dir = preg_replace(",^" . _DIR_RACINE .",", '', $dir); $dir = preg_replace(",^" . _DIR_RACINE .",", '', $dir);
redirige_par_entete(generer_url_action("test_dirs", "test_dir=$dir", true)); redirige_par_entete(generer_url_action("test_dirs", "test_dir=$dir", true));
} }
// utiliser une version fraiche des metas (ie pas le cache) // utiliser une version fraiche des metas (ie pas le cache)
include_spip('inc/meta'); include_spip('inc/meta');
lire_metas(); lire_metas();
if (!isset($GLOBALS['meta']["status_dump"])){ if (!isset($GLOBALS['meta']["status_dump"])) {
$start = true; $gz = _request('gz');
} else{
$status_dump = explode("::",$GLOBALS['meta']["status_dump"]);
$start = ($status_dump[2]==0)&&($status_dump[3]==0);
$gz = $status_dump[0];
$archive = $status_dump[1];
}
$file = $dir . $archive;
if ($start){
$archive = export_nom_fichier_dump($dir,$gz); $archive = export_nom_fichier_dump($dir,$gz);
$status_dump = "$gz::$archive::0::0";
ecrire_meta("status_dump", "$status_dump",'non');
$status_dump = explode("::",$status_dump);
ecrire_metas();
// Au cas ou le dernier dump n'aurait pas ete acheve correctement
foreach(preg_files($file . ".part_[0-9]+_[0-9]+") as $dummy)
@unlink($dummy);
$reprise = ''; // creer l'en tete du fichier a partir de l'espace public
// (provisoire) creer l'en tete du fichier
include_spip('inc/headers'); include_spip('inc/headers');
redirige_par_entete(generer_action_auteur("export_all","$archive/start",$redirect,true)); redirige_par_entete(generer_action_auteur("export_all", "start,$gz,$archive", '', true));
//ecrire_fichier($dir.$archive, export_entete(),false,false);
} }
else
$reprise = " (" . $status_dump[2] . ", " . $status_dump[3] . ")"; list($gz, $archive, $etape_actuelle, $sous_etape) =
explode("::",$GLOBALS['meta']["status_dump"]);
$file = $dir . $archive;
$redirect = generer_url_ecrire("export_all");
if (!$etape_actuelle AND !$sous_etape) {
$l = preg_files($file . ".part_[0-9]+_[0-9]+");
if ($l) {
spip_log("menage d'une sauvegarde inachevee: " . join(',', $l));
foreach($l as $dummy)@unlink($dummy);
}
}
list($tables_for_dump, $tables_for_link) = export_all_list_tables(); list($tables_for_dump, $tables_for_link) = export_all_list_tables();
$status_dump = explode("::",$GLOBALS['meta']["status_dump"]);
$etape_actuelle = $status_dump[2];
$sous_etape = $status_dump[3];
$all = count($tables_for_dump); $all = count($tables_for_dump);
// Pour avoir les valeurs de _DIR_IMG etc relatives a l'espace public // concatenation des fichiers crees a l'appel precedent
// la phase finale de reunion des fichiers en un seul est faite la-bas ramasse_parties($file, $file);
ramasse_parties($dir.$archive, $dir.$archive);
if ($etape_actuelle > $all){ // au timeout if ($etape_actuelle > $all){
ecrire_fichier($dir.$archive, export_enpied(),false,false); // l'appel precedent avait fini le boulot. mettre l'en-pied.
ecrire_fichier($file, export_enpied(),false,false);
include_spip('inc/headers'); include_spip('inc/headers');
redirige_par_entete(generer_action_auteur("export_all","$archive/end",'',true)); redirige_par_entete(generer_action_auteur("export_all","end,$gz,$archive",'',true));
} }
echo install_debut_html(_T('info_sauvegarde') . " ($all)"); echo install_debut_html(_T('info_sauvegarde') . " ($all)");
$f = ($gz) ? gzopen($file, "ab") : fopen($file, "ab");
if (!$f) {
echo "<p>",
_T('avis_erreur_sauvegarde',
array('type'=>'.', 'id_objet'=>'. .')),
"</p>\n";
exit;
}
$_fputs = ($gz) ? gzputs : fputs;
if ($gz) gzclose($f); else fclose($f);
if ($GLOBALS['flag_ob_flush']) ob_flush();
flush();
if (!($timeout = ini_get('max_execution_time')*1000)); if (!($timeout = ini_get('max_execution_time')*1000));
$timeout = 30000; // parions sur une valeur tellement courante ... $timeout = 30000; // parions sur une valeur tellement courante ...
...@@ -146,14 +119,17 @@ function exec_export_all_dist() ...@@ -146,14 +119,17 @@ function exec_export_all_dist()
// script de rechargement auto sur timeout // script de rechargement auto sur timeout
echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"".$redirect."\";',$timeout);</script>\n"); echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"".$redirect."\";',$timeout);</script>\n");
if ($GLOBALS['flag_ob_flush']) ob_flush();
flush();
echo "<div style='text-align: left'>\n"; echo "<div style='text-align: left'>\n";
$etape = 1; $etape = 1;
// Instancier une fois pour toutes, car on va boucler un max. // Instancier une fois pour toutes, car on va boucler un max.
if (isset($GLOBALS['EXPORT_logos']) && $GLOBALS['EXPORT_logos']==true) if (isset($GLOBALS['EXPORT_logos']) && $GLOBALS['EXPORT_logos']==true)
$GLOBALS['chercher_logo'] = charger_fonction('chercher_logo', 'inc',true); $GLOBALS['chercher_logo'] = charger_fonction('chercher_logo', 'inc',true);
else else $GLOBALS['chercher_logo'] = false;
$GLOBALS['chercher_logo'] = false;
foreach($tables_for_dump as $table){ foreach($tables_for_dump as $table){
if ($etape_actuelle <= $etape) { if ($etape_actuelle <= $etape) {
$r = spip_query("SELECT COUNT(*) FROM $table"); $r = spip_query("SELECT COUNT(*) FROM $table");
...@@ -167,7 +143,11 @@ function exec_export_all_dist() ...@@ -167,7 +143,11 @@ function exec_export_all_dist()
flush(); flush();
$sous_etape = 0; $sous_etape = 0;
} }
$etape++; $etape++;
$status_dump = "$gz::$archive::" . $etape . "::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');
} }
echo "</div>\n"; echo "</div>\n";
// si Javascript est dispo, anticiper le Time-out // si Javascript est dispo, anticiper le Time-out
......
...@@ -74,6 +74,10 @@ function export_objets($table, $etape, $cpt, $dir, $archive, $gz, $total) { ...@@ -74,6 +74,10 @@ function export_objets($table, $etape, $cpt, $dir, $archive, $gz, $total) {
while (1){ // on ne connait pas le nb de paquets d'avance while (1){ // on ne connait pas le nb de paquets d'avance
$string = build_while($debut, $table, $prim); $string = build_while($debut, $table, $prim);
$cpt++;
$debut += _EXPORT_TRANCHES_LIMITE;
$status_dump = "$gz::$archive::$etape::$cpt";
// attention $string vide ne suffit pas a sortir // attention $string vide ne suffit pas a sortir
// car les admins restreints peuvent parcourir // car les admins restreints peuvent parcourir
// une portion de table vide pour eux. // une portion de table vide pour eux.
...@@ -81,33 +85,23 @@ function export_objets($table, $etape, $cpt, $dir, $archive, $gz, $total) { ...@@ -81,33 +85,23 @@ function export_objets($table, $etape, $cpt, $dir, $archive, $gz, $total) {
// on ecrit dans un fichier generique // on ecrit dans un fichier generique
// puis on le renomme pour avoir une operation atomique // puis on le renomme pour avoir une operation atomique
ecrire_fichier ($temp = $filetable . '.temp' . _EXTENSION_PARTIES, $string); ecrire_fichier ($temp = $filetable . '.temp' . _EXTENSION_PARTIES, $string);
// le fichier destination peut deja exister si on sort d'un timeout entre le rename et le ecrire_meta // 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('_%04d',$cpt) . _EXTENSION_PARTIES)) @unlink($f); if (file_exists($f = $filetable . sprintf('_%04d',$cpt) . _EXTENSION_PARTIES)) @unlink($f);
rename($temp, $f); rename($temp, $f);
} }
$cpt++;
$status_dump = "$gz::$archive::$etape::$cpt";
// on se contente d'une ecriture en base pour aller plus vite // on se contente d'une ecriture en base pour aller plus vite
// a la relecture on en profitera pour mettre le cache a jour // a la relecture on en profitera pour mettre le cache a jour
ecrire_meta("status_dump", $status_dump,'non'); ecrire_meta("status_dump", $status_dump,'non');
$debut = $cpt * _EXPORT_TRANCHES_LIMITE;
if ($debut >= $total) {break;} if ($debut >= $total) {break;}
echo " $debut"; echo " $debut";
} }
echo " $total."; echo " $total.";
# on prefere ne pas faire le ramassage ici de peur d'etre interrompu par le timeout au mauvais moment # on prefere ne pas faire le ramassage ici de peur d'etre interrompu par le timeout au mauvais moment
# le ramassage aura lieu en debut de hit suivant, et ne sera normalement pas interrompu car le temps pour ramasser # le ramassage aura lieu en debut de hit suivant, et ne sera normalement pas interrompu car le temps pour ramasser
# est plus court que le temps pour creer les parties # est plus court que le temps pour creer les parties
# ramasse_parties($dir.$archive, $dir.$archive); // 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');
} }
// Construit la version xml des champs d'une table // Construit la version xml des champs d'une table
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter