function base_restaurer_dist($titre = '', $reprise = false) { $status_file = _DUMP_STATUS_FILE; $status_file = _DIR_TMP . basename($status_file) . ".txt"; if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) { } else { $redirect = parametre_url(generer_action_auteur('restaurer', _DUMP_STATUS_FILE), "step", intval(_request('step') + 1), '&'); $timeout = ini_get('max_execution_time'); // valeur conservatrice si on a pas reussi a lire le max_execution_time if (!$timeout) { $timeout = 30; } // parions sur une valeur tellement courante ... $max_time = time() + $timeout / 2; include_spip('inc/minipres'); @ini_set("zlib.output_compression", "0"); // pour permettre l'affichage au fur et a mesure $titre = _T('dump:restauration_en_cours') . " (" . count($status['tables']) . ") "; $balise_img = chercher_filtre('balise_img'); $titre .= $balise_img(chemin_image('searching.gif')); echo install_debut_html($titre); // script de rechargement auto sur timeout echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . $timeout * 1000 . ")"); echo "<div style='text-align: left'>\n"; dump_serveur($status['connect']); spip_connect('dump'); // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde if (_request('step')) { $options = array('callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where'] ? $status['where'] : array(), 'desc_tables_dest' => array()); if ($desc = sql_getfetsel('valeur', 'spip_meta', "nom='dump_structure_temp'", '', '', '', '', 'dump') and $desc = unserialize($desc)) { $options['desc_tables_dest'] = $desc; } #var_dump(sql_allfetsel('nom,valeur','spip_meta',"",'','','','','dump')); #die(); $res = base_copier_tables($status_file, $status['tables'], 'dump', '', $options); } else { // mais on en profite pour reparer les version base pour etre sur de ne pas les perdre sql_updateq("spip_meta", array('impt' => 'oui'), "nom='version_installee'", '', 'dump'); sql_updateq("spip_meta", array('impt' => 'oui'), "nom LIKE '%_base_version'", '', 'dump'); } echo "</div>\n"; if (!$res) { echo dump_relance($redirect); } echo install_fin_html(); ob_end_flush(); flush(); if (!$res) { exit; } // quand on sort de $export avec true c'est qu'on a fini dump_end(_DUMP_STATUS_FILE, 'restaurer'); include_spip('inc/headers'); echo redirige_formulaire(generer_url_ecrire("restaurer", 'status=' . _DUMP_STATUS_FILE, '', true, true)); } }
function inc_sauvegarder_dist($status_file, $redirect = '') { $status_file = _DIR_TMP . basename($status_file) . ".txt"; if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) { } else { $timeout = ini_get('max_execution_time'); // valeur conservatrice si on a pas reussi a lire le max_execution_time if (!$timeout) { $timeout = 30; } // parions sur une valeur tellement courante ... $max_time = time() + $timeout / 2; include_spip('inc/minipres'); @ini_set("zlib.output_compression", "0"); // pour permettre l'affichage au fur et a mesure $titre = _T('dump:sauvegarde_en_cours') . " (" . count($status['tables']) . ") "; $balise_img = chercher_filtre('balise_img'); $titre .= $balise_img(chemin_image('searching.gif')); echo install_debut_html($titre); // script de rechargement auto sur timeout echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . $timeout * 1000 . ")"); echo "<div style='text-align: left'>\n"; dump_serveur($status['connect']); spip_connect('dump'); // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde $res = false; if (_request('step')) { $options = array('callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where'] ? $status['where'] : array()); $res = base_copier_tables($status_file, $status['tables'], '', 'dump', $options); } echo "</div>\n"; if (!$res and $redirect) { echo dump_relance($redirect); } echo install_fin_html(); ob_end_flush(); flush(); return $res; } }
function inc_migrer_vers_dist($status_file, $redirect='') { if (!$status = migrer_vers_lire_status($status_file)) { // rien a faire ? } else { $status_file = _DIR_TMP.basename($status_file).".txt"; $timeout = ini_get('max_execution_time'); // valeur conservatrice si on a pas reussi a lire le max_execution_time if (!$timeout) $timeout=30; // parions sur une valeur tellement courante ... $timeout = min($timeout,30); // ne prolongeons pas plus que 30s car cela peut produire des erreur 500 et bloque le refresh $max_time = time()+$timeout/2; include_spip('inc/minipres'); //@apache_setenv('no-gzip', 1); // trop agressif, plante sur certains hebergements @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure @ini_set("output_buffering","off"); @ini_set('implicit_flush', 1); @ob_implicit_flush(1); switch ($status['etape']){ case 'init': $titre = _T('migration:titre_debut_migration'); break; case 'base': case 'basecopie': $titre = _T('migration:titre_migration_en_cours_base') . " (".count($status['tables']).") "; break; case 'fichiers': case 'fichierscopie': $titre = _T('migration:titre_migration_en_cours_fichiers') . " (".count($status['files']).") "; break; case 'squelettes': case 'squelettescopie': $titre = _T('migration:titre_migration_en_cours_squelettes') . " (".array_sum(array_map('count',$status['squelettes'])).") "; break; } $titre .= "<img src=\"".chemin_image('searching.gif')."\" />"; echo ( install_debut_html($titre)); // script de rechargement auto sur timeout echo "<meta http-equiv='Refresh' content='$timeout'>"; @flush(); echo "<div style='text-align: left'>\n"; include_spip('inc/migration'); $s = lire_migration_vers_status(); // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde switch ($status['etape']){ case 'init': $status['etape'] = migrer_vers_etape_suivante($status['etape'],$s['quoi']); ecrire_fichier($status_file, serialize($status)); break; case 'base': case 'basecopie': $options = array( 'callback_progression' => 'migrer_vers_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where']?$status['where']:array(), 'racine_fonctions_dest' =>'migration/envoi', 'data_pool' => 200*1024, ); $res = base_copier_tables($status_file, $status['tables'], '', '', $options); if ($res) { if ($res==="abort"){ $s = lire_migration_vers_status(); $s['status'] = 'abort'; ecrire_migration_status('vers',$s); } if ($s['status'] != 'abort') { $status['etape'] = migrer_vers_etape_suivante($status['etape'],$s['quoi']); ecrire_fichier($status_file, serialize($status)); } } break; case 'fichiers': case 'fichierscopie': $options = array( 'callback_progression' => 'migrer_vers_afficher_progres', 'max_time' => $max_time, 'racine_fonctions_dest' =>'migration/envoi', 'data_pool' => 200*1024, ); $res = base_copier_files($status_file, $status['files'],_DIR_IMG,_DIR_IMG, $options); if ($res) { $status['etape'] = migrer_vers_etape_suivante($status['etape'],$s['quoi']); ecrire_fichier($status_file, serialize($status)); } break; case 'squelettes': case 'squelettescopie': $options = array( 'callback_progression' => 'migrer_vers_afficher_progres', 'max_time' => $max_time, 'racine_fonctions_dest' =>'migration/envoi', 'data_pool' => 200*1024, 'etape_suivante' => 'squelettescopie', ); $res = true; if ($dir_sources = migration_determiner_dossier_squelette() AND count($dir_sources = explode(':',$dir_sources))){ foreach($dir_sources as $dir_source) $res = base_copier_files($status_file, $status['squelettes'][$dir_source],$dir_source,_DIR_RACINE."squelettes/", $options); } if ($res) { $status['etape'] = migrer_vers_etape_suivante($status['etape'],$s['quoi']); ecrire_fichier($status_file, serialize($status)); } break; } // sortir si on a fini ou abandon demande $res = (in_array($status['etape'],array('fini','finition')) OR $s['status']=='abort'); echo ( "</div>\n"); if (!$res AND $redirect) echo migrer_vers_relance($redirect); echo (install_fin_html()); #while (ob_get_level()) # ob_end_flush(); flush(); return $res; } }