[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/exec/ -> export_all.php (source)

   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  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics