source: pmb4.2/trunk/fuentes/pmb/admin/sauvegarde/run.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: run.php,v 1.11 2015-04-03 11:16:21 jpermanne Exp $
6
7//Sauvegarde des jeux : initialisation de la sauvegarde d'un jeu, création du fichier SQL et compression éventuelle, log
8$base_path="../..";
9$base_auth="SAUV_AUTH|ADMINISTRATION_AUTH";
10$base_title="\$msg[sauv_misc_running]";
11require($base_path."/includes/init.inc.php");
12
13require_once("lib/api.inc.php");
14
15//Récupération de l'id utilisateur
16$requete="select userid from users where username='".SESSlogin."'";
17$resultat=pmb_mysql_query($requete) or die(pmb_mysql_error());
18$userid=pmb_mysql_result($resultat,0,0);
19
20//Si tableau des sauvegardes est vide alors fin
21if (!is_array($sauvegardes)) {
22        echo "<script>document.location=\"end.php\";</script>";
23        exit();
24}
25
26//Entête
27print "<div id=\"contenu-frame\">\n";
28echo "<h1>".$msg["sauv_misc_export_running"]."</h1>\n";
29echo "<form class='form-$current_module' name=\"sauv\" action=\"\" method=\"post\">\n";
30echo "<br /><br />";
31echo "<center><input type=\"button\" value=\"".$msg["sauv_annuler"]."\" onClick=\"document.location='launch.php';\" class=bouton></center>\n";
32
33//Pour le premier jeux de sauvegarde de la liste restante
34$currentSauv=$sauvegardes[0];
35
36//Affichage des jeux restants
37for ($i=1; $i<count($sauvegardes); $i++) {
38        echo "<input type=\"hidden\" name=\"sauvegardes[]\" value=\"".$sauvegardes[$i]."\">\n";
39}
40
41//Jeu en cours
42echo "<input type=\"hidden\" name=\"currentSauv\" value=\"".$currentSauv."\">\n";
43
44//Recherche des paramètres de la sauvegarde
45$requete="select sauv_sauvegarde_nom, sauv_sauvegarde_file_prefix, sauv_sauvegarde_tables, sauv_sauvegarde_compress,sauv_sauvegarde_compress_command, sauv_sauvegarde_crypt from sauv_sauvegardes where sauv_sauvegarde_id=".$currentSauv;
46$resultat=pmb_mysql_query($requete);
47$res=pmb_mysql_fetch_object($resultat);
48
49//Création du log dans la base de log
50$log_messages="Start time : ".date("H:i",time())."\r\n";
51$log_file=$res->sauv_sauvegarde_file_prefix."_".date("Y_m_d",time());
52
53//Recherche si nom de fichier déjà existant
54$n_version=0;
55if (!defined('SAUV_PREFIX')) define( 'SAUV_PREFIX', "" );
56        else define( 'SAUV_PREFIX', SAUV_PREFIX."_" );
57$log_file_test=SAUV_PREFIX.$log_file.".sav";
58while (file_exists("../../admin/backup/backups/".$log_file_test)) {
59        $n_version++;
60        $log_file_test=$log_file."_".$n_version.".sav";
61}
62$log_file=$log_file_test;
63
64$requete="insert into sauv_log (sauv_log_start_date,sauv_log_file,sauv_log_messages,sauv_log_userid) values(now(),'$log_file','$log_messages',$userid)";
65pmb_mysql_query($requete) or die(pmb_mysql_error());
66$logid=pmb_mysql_insert_id();
67
68//Eleéments nécessaires pour la suite
69echo "<input type=\"hidden\" name=\"filename\" value=\"../../admin/backup/backups/".$log_file."\">\n";
70echo "<input type=\"hidden\" name=\"logid\" value=\"".$logid."\">\n";
71echo "<input type=\"hidden\" name=\"sauv_sauvegarde_nom\" value=\"".$res->sauv_sauvegarde_nom."\">\n";
72echo "<center><h2>".sprintf($msg["sauv_misc_export_SQL"],$res->sauv_sauvegarde_nom)."</h2></center>";
73
74//Création du fichier d'export
75$fe=@fopen("../../admin/backup/backups/".$log_file,"w+");
76if (!$fe) abort("The file $log_file could not be created",$logid);
77fwrite($fe,"#Name : ".$res->sauv_sauvegarde_nom."\r\n");
78fwrite($fe,"#".$log_messages);
79fwrite($fe,"#Date : ".date("Y-m-d",time())."\r\n");
80
81//Récupération des tables
82$requete="select sauv_table_tables from sauv_tables where sauv_table_id in (".$res->sauv_sauvegarde_tables.")";
83$resultat=pmb_mysql_query($requete) or abort("Tables could not be retrived",$logid);
84$tables=array();
85while (list($sauv_table_tables)=pmb_mysql_fetch_row($resultat)) {
86        $tSauv_table_tables=explode(",",$sauv_table_tables);
87        for ($i=0; $i<count($tSauv_table_tables); $i++) {
88                $as=array_search($tSauv_table_tables[$i],$tables);
89                if (($as!==null)&&($as!==false)) {
90                        //
91                } else {
92                        $tables[]=$tSauv_table_tables[$i];
93                }
94        }
95}
96
97//Export SQL
98
99$temp_file="temp_".(SAUV_PREFIX!=""?SAUV_PREFIX."_":"").$res->sauv_sauvegarde_file_prefix."_".date("d_m_Y",time()).".sql";
100$ftemp=@fopen("../../admin/backup/backups/".$temp_file,"w+");
101if (!$ftemp) abort("Temporary file for SQL export could not be created",$logid);
102
103//Log de l'entête
104fwrite($fe,"#Groups : ".$res->sauv_sauvegarde_tables."\r\n");
105fwrite($fe,"#Tables : ".implode(",",$tables)."\r\n");
106
107//Ecriture du fichier SQL
108for ($i=0; $i<count($tables); $i++) {
109        table_dump($tables[$i],$ftemp);
110}
111
112write_log("SQL OK : SQL export is OK",$logid);
113
114fclose($ftemp);
115
116//Compression éventuelle
117fwrite($fe,"#Compress : ".$res->sauv_sauvegarde_compress."\r\n");
118if ($res->sauv_sauvegarde_compress==1) {
119        fwrite($fe,"#Compress commands : ".$res->sauv_sauvegarde_compress_command."\r\n");
120        $command=explode(":",$res->sauv_sauvegarde_compress_command);
121       
122        switch ($command[0]) {
123                case 'external' :
124                        $c_command=str_replace("%s","../../admin/backup/backups/".$temp_file,$command[1]);
125                        exec($c_command);
126                        @unlink("../../admin/backup/backups/".$temp_file);
127                        $temp_file="../../admin/backup/backups/".$temp_file.".".$command[3];
128                        if (!file_exists($temp_file)) abort("Compression failed",$logid);
129                break;
130                case 'internal' :
131                        $fz=bzopen("../../admin/backup/backups/".$temp_file.".bz2","w");
132                        if (!$fz) abort("Compression failed",$logid);
133                        $ftemp=fopen("../../admin/backup/backups/".$temp_file,"r");
134                        if (!$ftemp) abort("Compression failed",$logid);
135                        $to_crypt=fread($ftemp,filesize("../../admin/backup/backups/".$temp_file));
136                        bzwrite($fz,$to_crypt);
137                        bzclose($fz);
138                        fclose($ftemp);
139                        unlink("../../admin/backup/backups/".$temp_file);
140                        $temp_file="../../admin/backup/backups/".$temp_file.".bz2";
141                break;
142        }
143        write_log("Compress OK : Compress is OK",$logid);
144} else {
145        $temp_file="../../admin/backup/backups/".$temp_file;
146}
147
148//Fichier temporaire contenant le SQL compressé ou non
149echo "<input type=\"hidden\" name=\"temp_file\" value=\"$temp_file\">";
150
151//cryptage ?
152if ($res->sauv_sauvegarde_crypt==1) {
153        $action="crypt.php";
154} else {
155        $action="end_save.php";
156}
157echo "</form></body></html>";
158
159//Etape suivante
160echo "<script>document.sauv.action=\"$action\"; document.sauv.submit();</script>";
161print "</div>";
162?>
Note: See TracBrowser for help on using the repository browser.