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');
function action_export_all_dist()
{
global $connect_toutes_rubriques ;
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
......@@ -29,31 +29,28 @@ function action_export_all_dist()
if ($connect_toutes_rubriques AND file_exists(_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;
# var_dump($file);
#die();
spip_log("action $arg $file");
include_spip('inc/meta');
if ($action=='start'){
// ecrire le debut du fichier
if ($quoi =='start'){
// creer l'en tete du fichier et retourner dans l'espace prive
include_spip('inc/export');
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();
if (ecrire_fichier($file, export_entete(),false)) {
// retour a la case depart pour vraiment faire le dump
include_spip('inc/headers');
redirige_par_entete(_request('redirect'));
}
elseif($action=='end'){
ecrire_meta("status_dump", "$gz::$archive::1::0",'non');
ecrire_metas();
include_spip('inc/headers');
redirige_par_entete(generer_url_ecrire('export_all'));
} else {
echo "<p>",
_T('avis_erreur_sauvegarde',
array('type'=>'.', 'id_objet'=>'. .')),
"</p>\n";
exit;
}
}elseif ($quoi=='end'){
effacer_meta("status_dump");
ecrire_metas();
......
......@@ -59,8 +59,6 @@ $GLOBALS['flag_ob_flush'] = function_exists('ob_flush');
function exec_export_all_dist()
{
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))
$dir = _DIR_DUMP;
......@@ -71,74 +69,49 @@ function exec_export_all_dist()
$dir = preg_replace(",^" . _DIR_RACINE .",", '', $dir);
redirige_par_entete(generer_url_action("test_dirs", "test_dir=$dir", true));
}
// utiliser une version fraiche des metas (ie pas le cache)
include_spip('inc/meta');
lire_metas();
if (!isset($GLOBALS['meta']["status_dump"])){
$start = true;
} 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){
if (!isset($GLOBALS['meta']["status_dump"])) {
$gz = _request('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 = '';
// (provisoire) creer l'en tete du fichier
// creer l'en tete du fichier a partir de l'espace public
include_spip('inc/headers');
redirige_par_entete(generer_action_auteur("export_all","$archive/start",$redirect,true));
//ecrire_fichier($dir.$archive, export_entete(),false,false);
redirige_par_entete(generer_action_auteur("export_all", "start,$gz,$archive", '', true));
}
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();
$status_dump = explode("::",$GLOBALS['meta']["status_dump"]);
$etape_actuelle = $status_dump[2];
$sous_etape = $status_dump[3];
$all = count($tables_for_dump);
// 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
ramasse_parties($dir.$archive, $dir.$archive);
// concatenation des fichiers crees a l'appel precedent
ramasse_parties($file, $file);
if ($etape_actuelle > $all){ // au timeout
ecrire_fichier($dir.$archive, export_enpied(),false,false);
if ($etape_actuelle > $all){
// l'appel precedent avait fini le boulot. mettre l'en-pied.
ecrire_fichier($file, export_enpied(),false,false);
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)");
$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));
$timeout = 30000; // parions sur une valeur tellement courante ...
......@@ -146,14 +119,17 @@ function exec_export_all_dist()
// script de rechargement auto sur timeout
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";
$etape = 1;
// Instancier une fois pour toutes, car on va boucler un max.
if (isset($GLOBALS['EXPORT_logos']) && $GLOBALS['EXPORT_logos']==true)
$GLOBALS['chercher_logo'] = charger_fonction('chercher_logo', 'inc',true);
else
$GLOBALS['chercher_logo'] = false;
else $GLOBALS['chercher_logo'] = false;
foreach($tables_for_dump as $table){
if ($etape_actuelle <= $etape) {
$r = spip_query("SELECT COUNT(*) FROM $table");
......@@ -167,7 +143,11 @@ function exec_export_all_dist()
flush();
$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";
// si Javascript est dispo, anticiper le Time-out
......
......@@ -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
$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
// car les admins restreints peuvent parcourir
// une portion de table vide pour eux.
......@@ -81,33 +85,23 @@ function export_objets($table, $etape, $cpt, $dir, $archive, $gz, $total) {
// on ecrit dans un fichier generique
// puis on le renomme pour avoir une operation atomique
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);
rename($temp, $f);
}
$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');
$debut = $cpt * _EXPORT_TRANCHES_LIMITE;
if ($debut >= $total) {break;}
echo " $debut";
}
echo " $total.";
# 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
# est plus court que le temps pour creer les parties
# 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');
// ramasse_parties($dir.$archive, $dir.$archive);
}
// 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