[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 14 @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure 15 16 include_spip('inc/flock'); 17 include_spip('inc/actions'); 18 include_spip('inc/export'); 19 20 21 $GLOBALS['flag_ob_flush'] = function_exists('ob_flush'); 22 23 24 // http://doc.spip.org/@exec_export_all_dist 25 function exec_export_all_dist() 26 { 27 global $connect_toutes_rubriques; 28 $start = false; 29 30 if ($connect_toutes_rubriques AND file_exists(_DIR_DUMP)) 31 $dir = _DIR_DUMP; 32 else $dir = determine_upload(); 33 34 if (!is_writable($dir)) { 35 include_spip('inc/headers'); 36 $dir = preg_replace(",^" . _DIR_RACINE .",", '', $dir); 37 redirige_par_entete(generer_url_action("test_dirs", "test_dir=$dir", true)); 38 } 39 40 // utiliser une version fraiche des metas (ie pas le cache) 41 include_spip('inc/meta'); 42 lire_metas(); 43 44 if (!isset($GLOBALS['meta']["status_dump"])) { 45 $gz = _request('gz'); 46 $archive = $gz 47 ? (_request('znom_sauvegarde') . '.xml.gz') 48 : (_request('nom_sauvegarde') . '.xml'); 49 50 // creer l'en tete du fichier a partir de l'espace public 51 include_spip('inc/headers'); 52 redirige_par_entete(generer_action_auteur("export_all", "start,$gz,$archive", '', true)); 53 } 54 55 list($gz, $archive, $etape_actuelle, $sous_etape) = 56 explode("::",$GLOBALS['meta']["status_dump"]); 57 58 $file = $dir . $archive; 59 $redirect = generer_url_ecrire("export_all"); 60 $tables_sauvegardees = isset($GLOBALS['meta']['status_dump_tables'])?unserialize($GLOBALS['meta']['status_dump_tables']):array(); 61 62 if (!$etape_actuelle AND !$sous_etape) { 63 $l = preg_files($file . ".part_[0-9]+_[0-9]+"); 64 if ($l) { 65 spip_log("menage d'une sauvegarde inachevee: " . join(',', $l)); 66 foreach($l as $dummy)@unlink($dummy); 67 } 68 $start = true; // utilise pour faire un premier hit moitie moins long 69 $tables_sauvegardees = array(); 70 } 71 72 list($tables_for_dump, $tables_for_link) = export_all_list_tables(); 73 74 $all = count($tables_for_dump); 75 76 // concatenation des fichiers crees a l'appel precedent 77 ramasse_parties($dir, $archive); 78 79 if ($etape_actuelle > $all){ 80 // l'appel precedent avait fini le boulot. mettre l'en-pied. 81 ecrire_fichier($file, export_enpied(),false,false); 82 include_spip('inc/headers'); 83 redirige_par_entete(generer_action_auteur("export_all","end,$gz,$archive",'',true)); 84 } 85 86 echo install_debut_html(_T('info_sauvegarde') . " ($all)"); 87 88 if (!($timeout = ini_get('max_execution_time')*1000)); 89 $timeout = 30000; // parions sur une valeur tellement courante ... 90 // le premier hit est moitie moins long car seulement une phase d'ecriture de morceaux 91 // sans ramassage 92 // sinon grosse ecriture au 1er hit, puis gros rammassage au deuxieme avec petite ecriture,... ca oscille 93 if ($start) $timeout = round($timeout/2); 94 // script de rechargement auto sur timeout 95 echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"".$redirect."\";',$timeout);</script>\n"); 96 97 if ($GLOBALS['flag_ob_flush']) @ob_flush(); 98 flush(); 99 100 echo "<div style='text-align: left'>\n"; 101 $etape = 1; 102 103 // Les sauvegardes partielles prennent le temps d'indiquer les logos 104 // Instancier une fois pour toutes, car on va boucler un max. 105 if ($GLOBALS['connect_id_rubrique']) 106 $GLOBALS['chercher_logo'] = charger_fonction('chercher_logo', 'inc',true); 107 else $GLOBALS['chercher_logo'] = false; 108 109 foreach($tables_for_dump as $table){ 110 if ($etape_actuelle <= $etape) { 111 $r = spip_query("SELECT COUNT(*) FROM $table"); 112 $r = spip_fetch_array($r, SPIP_NUM); 113 $r = $r[0]; 114 echo "\n<br /><strong>",$etape, '. ', $table,"</strong> "; 115 if (!$r) echo _T('texte_vide'); 116 else 117 export_objets($table, $etape, $sous_etape,$dir, $archive, $gz, $r); 118 if ($GLOBALS['flag_ob_flush']) @ob_flush(); 119 flush(); 120 $sous_etape = 0; 121 // on utilise l'index comme ca c'est pas grave si on ecrit plusieurs fois la meme 122 $tables_sauvegardees[$table] = 1; 123 ecrire_meta("status_dump_tables", serialize($tables_sauvegardees),'non'); 124 } 125 $etape++; 126 $status_dump = "$gz::$archive::" . $etape . "::0"; 127 // on se contente d'une ecriture en base pour aller plus vite 128 // a la relecture on en profitera pour mettre le cache a jour 129 ecrire_meta("status_dump", $status_dump,'non'); 130 } 131 echo "</div>\n"; 132 // si Javascript est dispo, anticiper le Time-out 133 echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"$redirect\";',0);</script>\n"); 134 echo install_fin_html(); 135 } 136 137 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |