Example #1
0
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));
    }
}
Example #2
0
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;
    }
}
Example #3
0
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;
	}
}