security_check();
//Décommenter la ligne suivante pour le mode "manuel et bavard"
//$debug="yes";
// Désactiver le mode deflate afin que les ob_flush() et flush() fonctionnent
if (function_exists('apache_setenv')) apache_setenv("no-gzip","1");
//apache_setenv("dont-vary","1");
if (!isset($action) or ($action != "restaure")) {
if ($resultat_session == 'c') {
header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes");
die();
} else if ($resultat_session == '0') {
header("Location: ../logout.php?auto=1");
die();
}
}
if (!isset($action) or ($action != "restaure")) {
if (!checkAccess()) {
header("Location: ../logout.php?auto=1");
die();
}
} else {
// On s'assure que l'utilisateur qui a initié la restauration était bien
// un admin !
if (!isset($_SESSION["tempstatut"])) {
$_SESSION["tempstatut"] = $_SESSION['statut'];
}
if ($_SESSION["tempstatut"] != "administrateur") {
die();
}
}
// Initialisation du répertoire actuel de sauvegarde
$dirname = getSettingValue("backup_directory");
// Téléchargement d'un fichier vers backup
if (isset($action) and ($action == 'upload')) {
check_token();
$sav_file = isset($_FILES["sav_file"]) ? $_FILES["sav_file"] : NULL;
//echo "\$sav_file['tmp_name']=".$sav_file['tmp_name']."
";
if (!isset($sav_file['tmp_name']) or ($sav_file['tmp_name'] =='')) {
$msg = "Erreur de téléchargement ".$sav_file['tmp_name'].' '.$dirname;
} else if (!file_exists($sav_file['tmp_name'])) {
$msg = "Erreur de téléchargement.".$dirname.' '.$sav_file['tmp_name'];
} else if (!preg_match('/sql$/',$sav_file['name']) AND !preg_match('/gz$/',$sav_file['name'])){
$msg = "Erreur : seuls les fichiers ayant l'extension .sql ou .gz sont autorisés.";
} else {
$dest = "../backup/".$dirname."/";
$n = 0;
$nom_corrige = preg_replace("/[^.a-zA-Z0-9_=-]+/", "_", $sav_file['name']);
if (!deplacer_fichier_upload($sav_file['tmp_name'], "../backup/".$dirname."/".$nom_corrige)) {
$msg = "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire backup";
} else {
$msg = "Téléchargement réussi.";
}
}
}
// Suppression d'un fichier
if (isset($action) and ($action == 'sup')) {
check_token();
if (isset($_GET['file']) && ($_GET['file']!='')) {
if((isset($_GET['sous_dossier']))&&($_GET['sous_dossier']=='absences')) {
if (@unlink("../backup/".$dirname."/absences/".$_GET['file'])) {
$msg = "Le fichier ".$_GET['file']." a été supprimé.
\n";
} else {
$msg = "Un problème est survenu lors de la tentative de suppression du fichier ".$_GET['file'].".
Il s'agit peut-être un problème de droits sur le répertoire backup.
\n";
}
}
else {
if (@unlink("../backup/".$dirname."/".$_GET['file'])) {
$msg = "Le fichier ".$_GET['file']." a été supprimé.
\n";
if(file_exists("../backup/".$dirname."/".$_GET['file'].".txt")) {
@unlink("../backup/".$dirname."/".$_GET['file'].".txt");
}
} else {
$msg = "Un problème est survenu lors de la tentative de suppression du fichier ".$_GET['file'].".
Il s'agit peut-être un problème de droits sur le répertoire backup.
\n";
}
}
}
}
// Protection du répertoire backup
if (isset($action) and ($action == 'protect')) {
check_token();
include_once("../lib/class.htaccess.php");
// Instance of the htaccess class
// $ht = & new htaccess(TRUE);
$ht = new htaccess(TRUE);
$user = array();
// Get the logins from the password file
$user = $ht->get_htpasswd();
// Add an Administrator
if(empty($_POST['pwd1_backup']) || empty($_POST['pwd2_backup'])) {
$msg = "Problème : les deux mots de passe ne sont pas identiques ou sont vides.";
$error = 1;
} elseif ($_POST['pwd1_backup'] != $_POST['pwd2_backup']) {
$msg = "Problème : les deux mots de passe ne sont pas identiques.";
$error = 1;
} elseif (empty($_POST['login_backup'])) {
$msg = "Problème : l'identifiant est vide.";
$error = 1;
} else {
$_login = my_strtolower(unslashes($_POST['login_backup']));
if(is_array($user)) {
foreach($user as $key => $value) {
if($_login == $key) {
$ht->delete_user($_login);
}
}
}
}
if(!isset($error)) {
$ht->set_user($_login, $_POST['pwd1_backup']);
$ht->set_htpasswd();
$user = array();
$user = $ht->get_htpasswd();
clearstatcache();
if(!is_file('../backup/'.$dirname.'/.htaccess')) {
$ht->option['AuthName'] = '"PROTECTION BACKUP"';
$ht->set_htaccess();
}
}
}
// Suppression de la protection
if (isset($action) and ($action == 'del_protect')) {
check_token();
if ((@unlink("../backup/".$dirname."/.htaccess")) and (@unlink("../backup/".$dirname."/.htpasswd"))) {
$msg = "Les fichiers .htaccess et .htpasswd ont été supprimés. Le répertoire /backup n'est plus protégé\n";
}
}
function gzip($src, $level = 5, $dst = false){
// Pour compresser un fichier existant
if($dst == false) {
$dst = $src.".gz";
}
if(file_exists($src)){
$filesize = filesize($src);
$src_handle = fopen($src, "r");
if(!file_exists($dst)){
$dst_handle = gzopen($dst, "w$level");
while(!feof($src_handle)){
$chunk = fread($src_handle, 32768);
gzwrite($dst_handle, $chunk);
}
fclose($src_handle);
gzclose($dst_handle);
return true;
} else {
return false;
}
} else {
return false;
}
}
function deplacer_fichier_upload($source, $dest) {
$ok = @copy($source, $dest);
if (!$ok) $ok = @move_uploaded_file($source, $dest);
return $ok;
}
function test_ecriture_backup() {
$ok = 'no';
if ($f = @fopen("../backup/test", "w")) {
@fputs($f, '<'.'?php $ok = "yes"; ?'.'>');
@fclose($f);
include("../backup/test");
$del = @unlink("../backup/test");
}
return $ok;
}
function mysql_version2() {
$result = mysqli_query($GLOBALS["mysqli"], 'SELECT VERSION() AS version');
if ($result != FALSE && @mysqli_num_rows($result) > 0)
{
$row = mysqli_fetch_array($result);
$match = explode('.', $row['version']);
}
else
{
$result = @mysqli_query($GLOBALS["mysqli"], 'SHOW VARIABLES LIKE \'version\'');
if ($result != FALSE && @mysqli_num_rows($result) > 0)
{
$row = mysqli_fetch_row($result);
$match = explode('.', $row[1]);
}
}
if (!isset($match) || !isset($match[0])) $match[0] = 3;
if (!isset($match[1])) $match[1] = 21;
if (!isset($match[2])) $match[2] = 0;
return $match[0] . "." . $match[1] . "." . $match[2];
}
function init_time() {
global $TPSDEB,$TPSCOUR;
list ($usec,$sec)=explode(" ",microtime());
$TPSDEB=$sec;
$TPSCOUR=0;
}
function current_time() {
global $TPSDEB,$TPSCOUR;
list ($usec,$sec)=explode(" ",microtime());
$TPSFIN=$sec;
if (round($TPSFIN-$TPSDEB,1)>=$TPSCOUR+1) //une seconde de plus
{
$TPSCOUR=round($TPSFIN-$TPSDEB,1);
flush();
}
}
function backupMySql($db,$dumpFile,$duree,$rowlimit) {
global $TPSCOUR,$offsettable,$offsetrow,$cpt,$debug;
$fileHandle = fopen($dumpFile, "a");
if(!$fileHandle) {
echo "Ouverture de $dumpFile impossible
\n";
return FALSE;
}
if ($offsettable==0&&$offsetrow==-1){
$todump ="#**************** BASE DE DONNEES ".$db." ****************"."\n"
.date("\#\ \L\e\ \:\ d\ m\ Y\ \a\ H\h\ i")."\n";
$todump.="# Serveur : ".$_SERVER['SERVER_NAME']."\n";
$todump.="# Version PHP : " . phpversion()."\n";
$todump.="# Version mySQL : " . mysql_version2()."\n";
$todump.="# IP Client : ".$_SERVER['REMOTE_ADDR']."\n";
$todump.="# Fichier SQL compatible PHPMyadmin\n#\n";
$todump.="# ******* debut du fichier ********\n";
fwrite ($fileHandle,$todump);
}
$sql="SHOW TABLES;";
$result=mysqli_query($GLOBALS["mysqli"], $sql);
$numtab=0;
while ($t = mysqli_fetch_array($result)) {
$tables[$numtab]=$t[0];
$numtab++;
}
if (mysqli_error($GLOBALS["mysqli"])) {
echo "
Fichier ".($nb_tables_passees+1)."/".$nb_tables."
\n"; echo "Traitement de la table $nom_table
";
$fileHandle = gzopen($dumpFile, "rb");
$cpt_insert=0;
$formattedQuery = "";
$old_offset = $offset;
while(!gzeof($fileHandle)) {
current_time();
if ($duree>0 and $TPSCOUR>=$duree) { //on atteint la fin du temps imparti
if ($old_offset == $offset) {
echo "
La procédure de restauration ne peut pas continuer.
Un problème est survenu lors du traitement d'une requête près de :.
".$debut_req."
Erreur lors de la suppression dans 'a_tmp_setting'.
\n"; } if(unlink($dumpFile)) { echo "Succès de la suppression de $dumpFile.Erreur lors de la suppression de $dumpFile.
\n"; } } else { if(!$nettoyage=mysqli_query($GLOBALS["mysqli"], $sql)) { echo "Erreur lors de la suppression dans 'a_tmp_setting'.
\n"; } if(!unlink($dumpFile)) { echo "Erreur lors de la suppression de $dumpFile.
\n"; } } } else { // Il ne reste que les tables log, setting et utilisateurs à restaurer $tab_tables=array("setting","utilisateurs","log"); for($i=0;$iTraitement de la table $nom_table
";
$fileHandle = gzopen($dumpFile, "rb");
$cpt_insert=0;
$formattedQuery = "";
$old_offset = $offset;
while(!gzeof($fileHandle)) {
current_time();
if ($duree>0 and $TPSCOUR>=$duree) { //on atteint la fin du temps imparti
if ($old_offset == $offset) {
echo "
La procédure de restauration ne peut pas continuer.
Un problème est survenu lors du traitement d'une requête près de :.
".$debut_req."
Erreur lors de la suppression dans 'a_tmp_setting'.
\n"; } if(unlink($dumpFile)) { echo "Succès de la suppression de $dumpFile.Erreur lors de la suppression de $dumpFile.
\n"; } } else { if(!$nettoyage=mysqli_query($GLOBALS["mysqli"], $sql)) { echo "Erreur lors de la suppression dans 'a_tmp_setting'.
\n"; } if(!unlink($dumpFile)) { echo "Erreur lors de la suppression de $dumpFile.
\n"; } } } } } } return TRUE; } function extractMySqlDump($dumpFile,$duree) { // $dumpFile, fichier source // $duree=timeout pour changement de page (-1 = aucun) global $TPSCOUR,$offset,$cpt; //global $nom_table; global $dirname; //global $table_log_passee; global $ne_pas_restaurer_log; global $ne_pas_restaurer_tentatives_intrusion; if(!file_exists($dumpFile)) { echo "$dumpFile non trouvéLa procédure de restauration ne peut pas continuer.
Un problème est survenu lors du traitement d'une requête près de :.
".$debut_req."
La procédure de restauration ne peut pas continuer.
Un problème est survenu lors du traitement d'une requête près de :.
".$debut_req."
Le répertoire \"/backup\" n'est pas accessible en écriture.
\n"; echo "Vous ne pouvez donc pas accéder aux fonctions de sauvegarde/restauration de GEPI. Contactez l'administrateur technique afin de régler ce problème.
\n"; require("../lib/footer.inc.php"); die(); } if (!function_exists("gzwrite")) { echo "Les fonctions de compression 'zlib' ne sont pas activées. Vous devez configurer PHP pour qu'il utilise 'zlib'.
\n"; echo "Vous ne pouvez donc pas accéder aux fonctions de sauvegarde/restauration de GEPI. Contactez l'administrateur technique afin de régler ce problème.
\n"; require("../lib/footer.inc.php"); die(); } // Confirmation de la restauration if (isset($action) and ($action == 'restaure_confirm')) { check_token(); echo "ATTENTION : La procédure de restauration de la base est irréversible. Le fichier de restauration doit être valide. Selon le contenu de ce fichier, tout ou partie de la structure actuelle de la base ainsi que des données existantes peuvent être supprimées et remplacées par la structure et les données présentes dans le fichier.
\nAVERTISSEMENT : Cette procédure peut être très longue selon la quantité de données à restaurer.
\n"; echo "\n"; echo "\n"; require("../lib/footer.inc.php"); die(); } // Restauration if (isset($action) and ($action == 'restaure')) { check_token(); $restauration_mysql=isset($_POST["restauration_mysql"]) ? $_POST["restauration_mysql"] : (isset($_GET["restauration_mysql"]) ? $_GET["restauration_mysql"] : "n"); unset($file); $file = isset($_POST["file"]) ? $_POST["file"] : (isset($_GET["file"]) ? $_GET["file"] : NULL); $restauration_old_way=isset($_POST["restauration_old_way"]) ? $_POST["restauration_old_way"] : (isset($_GET["restauration_old_way"]) ? $_GET["restauration_old_way"] : "n"); $cpt=isset($_POST["cpt"]) ? $_POST["cpt"] : (isset($_GET["cpt"]) ? $_GET["cpt"] : 0); $t_debut=isset($_POST["t_debut"]) ? $_POST["t_debut"] : (isset($_GET["t_debut"]) ? $_GET["t_debut"] : time()); if($restauration_old_way=='y') { //=============================================== init_time(); //initialise le temps //début de fichier if (!isset($_GET["offset"])) $offset=0; else $offset=$_GET["offset"]; //timeout if (!isset($_GET["duree"])) $duree=$_SESSION['defaulttimeout']; else $duree=$_GET["duree"]; $fsize=filesize($path.$file); if(isset($offset)) { if ($offset==-1) $percent=100; else $percent=min(100,round(100*$offset/$fsize,0)); } else $percent=0; if ($percent >= 0) { $percentwitdh=$percent*4; echo "ou
\n"; echo "\n"; echo "
Restauration en cours Progression ".$percent."% | |
$cpt requête(s) exécutée(s) avec succès en tout.
"; // durée de la restauration $t_duree=time()-$t_debut; $s=$t_duree%60; $t_duree=floor($t_duree/60); $m=$t_duree%60; $h=floor($t_duree/60); echo "Restauration terminée en ".$h." h ".$m." min ".$s." s.
Votre session GEPI n'est plus valide, vous devez vous reconnecter
Se connecter
La restauration a été correctement effectuée.";
// on ne peut pas utliser unlink car dans la fonction shutdown() la arcine
// devient le dossier d'installation de PHP (echo getcwd();)
//unlink($gepiPath."/backup/".$dirname."/bilan_restauration_".$file.".txt");
echo "
Un fichier texte nommé 'bilan_restauration_".$file.".txt' a été créé dans le dossier des sauvegardes, vous pouvez le supprimer.";
}
else {
echo "
ATTENTION : la restauration a échoué.";
echo "
Un fichier texte nommé 'bilan_restauration_".$file.".txt' a été créé dans le dossier des sauvegardes,
la requête qui a fait échouer la restauration se trouve à la fin de ce fichier.";
}
if ($creation_fichier_sql) echo "
Un fichier nommé '".$file."' a été créé dans le dossier des sauvegardes, vous pouvez le supprimer.";
echo "
Dernière erreur PHP : ".$error['message']." dans le fichier ".$error['file']." en ligne ".$error['line']."
"; } echo "Votre session Gepi n'est plus valide, vous devez vous reconnecter.
"; // On détruit la session //session_destroy(); } // on fait patienter echo "Restauration de ".$file." en cours...
"; if (ob_get_contents()) ob_flush(); flush(); // on teste l'accès à mysql if (substr(PHP_OS,0,3) == 'WIN' && file_exists("mysqldump.exe")) @exec("mysql.exe --help",$t_retour,$retour); else @exec("mysql --help",$t_retour,$retour); if ($retour!=0) { echo ""; echo "La commande mysql n'est pas accessible, vérifiez votre configuration (sans doute un problème de PATH).
"; exit(); } // Quel est le char set à utiliser ? $char_set=(isset($_POST['char_set']))?$_POST['char_set']:"utf8"; // Tests sur le type du fichier à restaurer if (!is_readable("../backup/".$dirname."/".$file) || !is_writable("../backup/".$dirname."/".$file)){ echo ""; echo "Le fichier ".$file." n'est pas accessible en lecture et/ou en écriture, vérifiez les droits.
"; exit(); } $file_info=pathinfo("../backup/".$dirname."/".$file); if(!isset($file_info['extension']) || (strtolower($file_info['extension']!="gz") && strtolower($file_info['extension']!="sql"))) { echo ""; echo "Le fichier à restaurer doit avoir pour extension '.sql' ou '.gz'.
"; exit(); } // il faut éventuellement décompresser le fichier, car le serveur peut être sous Windows // (sinon un pipe et gunzip suffiraient) $creation_fichier_sql=false; if (strtolower($file_info['extension']=="gz")) { // on décompresse l'archive $d_file=$file_info['filename']; if (!file_exists("../backup/".$dirname."/".$d_file)) { $h=gzopen("../backup/".$dirname."/".$file,"rb"); $d_h=fopen("../backup/".$dirname."/".$d_file,"wb"); // ajout de SET NAMES... while($buffer=gzread($h,10240)) { fwrite($d_h,$buffer,strlen($buffer)); } gzclose($h); fclose($d_h); $file=$d_file; $creation_fichier_sql=true; } else { echo ""; echo "La restauration ne peut se faire avec la commande système mysql car un fichier ".$d_file." est déjà présent dans le dossier backup.
"; exit(); } } // C'est parti pour la restauration register_shutdown_function('shutdown'); if (substr(PHP_OS,0,3) == 'WIN' && file_exists("mysql.exe")) { $cmd="mysql.exe -v --default_character_set ".$char_set." -p".$dbPass." -u ".$dbUser." ".$dbDb." --host=".$dbHost; if (isset($dbPort)) {$cmd.=" --port=".$dbPort;} $cmd.=" < ../backup/".$dirname."/".$file ." > ../backup/".$dirname."/bilan_restauration_".$file.".txt"; } else { $cmd="mysql -v --default_character_set ".$char_set." -p".$dbPass." -u ".$dbUser." ".$dbDb." --host=".$dbHost; if (isset($dbPort)) {$cmd.=" --port=".$dbPort;} $cmd.=" < ../backup/".$dirname."/".$file ." > ../backup/".$dirname."/bilan_restauration_".$file.".txt"; } @exec($cmd,$t_retour,$retour); // ici le script est terminé, et donc la fonction 'shutdown' est appelée } else { $debug_restaure=isset($_POST["debug_restaure"]) ? $_POST["debug_restaure"] : (isset($_GET["debug_restaure"]) ? $_GET["debug_restaure"] : "n"); $ne_pas_restaurer_log=isset($_POST["ne_pas_restaurer_log"]) ? $_POST["ne_pas_restaurer_log"] : (isset($_GET["ne_pas_restaurer_log"]) ? $_GET["ne_pas_restaurer_log"] : "n"); $ne_pas_restaurer_tentatives_intrusion=isset($_POST["ne_pas_restaurer_tentatives_intrusion"]) ? $_POST["ne_pas_restaurer_tentatives_intrusion"] : (isset($_GET["ne_pas_restaurer_tentatives_intrusion"]) ? $_GET["ne_pas_restaurer_tentatives_intrusion"] : "n"); init_time(); //initialise le temps //début de fichier // En fait d'offset, on compte maintenant des lignes if (!isset($_GET["offset"])) {$offset=0;} else {$offset=$_GET["offset"];} //timeout if (!isset($_GET["duree"])) {$duree=$_SESSION['defaulttimeout'];} else {$duree=$_GET["duree"];} echo "Extraction de l'archive...
";
if(extractMySqlDump($path.$file,$duree)) {
$succes_etape="y";
}
}
else {
// TESTER S'IL RESTE DES table_%
$sql="SELECT 1=1 FROM a_tmp_setting WHERE name LIKE 'table_%';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
$erreur_mysql=FALSE;
// Il reste des tables à restaurer
//if (restoreMySqlDump($path."/base_extraite.sql",$duree)) {
if (restoreMySqlDump($duree)) {
$succes_etape="y";
}
}
else {
// La restauration est achevée
// On ne devrait pas arriver là.
echo "
Restauration terminée.
Votre session GEPI n'est plus valide, vous devez vous reconnecter
Se connecter
Une erreur s'est produite!
";
}
else {
// durée de la sauvegarde
$t_duree=time()-$t_debut;
$s=$t_duree%60;
$t_duree=floor($t_duree/60);
$m=$t_duree%60;
$h=floor($t_duree/60);
//$sql="SELECT * FROM a_tmp_setting WHERE name LIKE 'table_%';";
// Pour nettoyer aussi une trace d'une sauvegarde consécutive à une restauration ratée... pas sûr que ce soit prudent...
$sql="SELECT * FROM a_tmp_setting WHERE name LIKE 'table_%' AND value!='a_tmp_setting';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)==0) {
echo "
Restauration terminée en ".$h." h ".$m." min ".$s." s.
Votre session GEPI n'est plus valide, vous devez vous reconnecter
Se connecter
NOTE: J'ai un problème bizarre! Alors que le lien pointe bien vers ../login.php, je me retrouve un dossier plus haut sur un logout.php hors du dossier de Gepi si bien que j'obtiens un 404 Not Found???
\n"; echo "Sauvegarde en cours A la fin de la sauvegarde, Gepi vous proposera automatiquement de télécharger le fichier. Progression ".$percent."% | |
\n |
Sauvegarde terminée en ".$h." h ".$m." min ".$s." s.
\n";
//$nomsql.$filetype
/*
$handle=opendir($path);
$tab_file = array();
$n=0;
while ($file = readdir($handle)) {
if (($file != '.') and ($file != '..') and ($file != 'remove.txt')
//=================================
// AJOUT: boireaus
and ($file != 'csv')
and ($file != 'notanet') //le dossier notanet à ne pas afficher dans la liste
//=================================
and ($file != '.htaccess') and ($file != '.htpasswd') and ($file != 'index.html')) {
$tab_file[] = $file;
$n++;
}
}
closedir($handle);
rsort($tab_file);
*/
$tab_file=get_tab_fichiers_du_dossier_de_sauvegarde($path);
$n=count($tab_file);
$nom_fichier=str_replace($path,'',$fichier);
$nom_fichier=str_replace('.sql','',$nom_fichier);
$fileid=null;
if ($n > 0) {
for($m=0;$m
Télécharger le fichier généré par la sauvegarde
\n"; echo "Sauvegarde en cours...
"; if (ob_get_contents()) ob_flush(); flush(); $t_debut=time(); if (substr(PHP_OS,0,3) == 'WIN' && file_exists("mysqldump.exe")) { // on est sous Window$ et on a $filename : "xxxx.sql.gz" $filename=substr($filename,0,-3); // $filename : "xxxx.sql" $command = "mysqldump.exe --skip-opt --add-drop-table --skip-disable-keys --quick -Q --create-options --set-charset --skip-comments -h $dbHost -u $dbUser --password=$dbPass"; if (isset($dbPort)) {$command.=" --port=".$dbPort;} $command .= " $dbDb > $filename"; $exec = exec($command); gzip($filename); // on compresse et on obtient un fichier xxxx.sql.gz unlink($filename); // on supprime le fichier xxxx.sql $filename=$filename.".gz"; // // $filename : xxxx.sql.gz } else { if ($ver_mysql[0] == "5" OR ($ver_mysql[0] == "4" AND $ver_mysql[1] >= "1")) { $command = "mysqldump --skip-opt --add-drop-table --skip-disable-keys --quick -Q --create-options --set-charset --skip-comments -h $dbHost -u $dbUser --password=$dbPass"; if (isset($dbPort)) {$command.=" --port=".$dbPort;} $command .= " $dbDb | gzip > $filename"; } elseif ($ver_mysql[0] == "4" AND $ver_mysql[1] == "0" AND $ver_mysql[2] >= "17") { // Si on est là, c'est que le serveur mysql est d'une version 4.0.17 ou supérieure $command = "mysqldump --add-drop-table --quick --quote-names --skip-comments -h $dbHost -u $dbUser --password=$dbPass"; if (isset($dbPort)) {$command.=" --port=".$dbPort;} $command .= " $dbDb | gzip > $filename"; } else { // Et là c'est qu'on a une version inférieure à 4.0.17 $command = "mysqldump --add-drop-table --quick --quote-names -h $dbHost -u $dbUser --password=$dbPass"; if (isset($dbPort)) {$command.=" --port=".$dbPort;} $command .= " $dbDb | gzip > $filename"; } $exec = exec($command); } // durée de la sauvegarde $t_duree=time()-$t_debut; $s=$t_duree%60; $t_duree=floor($t_duree/60); $m=$t_duree%60; $h=floor($t_duree/60); if (filesize($filename) > 10000) { echo ""; echo "La sauvegarde a été réalisée avec succès en ".$h." h ".$m." min ".$s." s.
\n"; if((isset($_POST['description_sauvegarde']))&&($_POST['description_sauvegarde']!='')) { $f_desc=fopen($filename.".txt", "a+"); $description_sauvegarde=suppression_sauts_de_lignes_surnumeraires($_POST['description_sauvegarde']); fwrite($f_desc, $description_sauvegarde); fclose($f_desc); } } else { echo "Erreur lors de la sauvegarde.
\n"; } } //Ajout Eric if (isset($action) and ($action == 'zip')) { check_token(); define( 'PCLZIP_TEMPORARY_DIR', '../backup/' ); require_once('../lib/pclzip.lib.php'); if (isset($dossier_a_archiver)) { $suffixe_zip="_le_".date("Y_m_d_\a_H\hi"); switch ($dossier_a_archiver) { case "cdt": $chemin_stockage = $path."/_cdt".$suffixe_zip.".zip"; //l'endroit où sera stockée l'archive if((isset($GLOBALS['multisite']) AND $GLOBALS['multisite'] == 'y')) { if((isset($_COOKIE['RNE']))&&($_COOKIE['RNE']!='')) { if(!preg_match('/^[A-Za-z0-9]*$/', $_COOKIE['RNE'])) { echo "RNE invalide : ".$_COOKIE['RNE']."
\n"; $chemin_stockage=""; } else { if (!is_dir('../documents/'.$_COOKIE['RNE'])){ @mkdir('../documents/'.$_COOKIE['RNE']); } $dossier_a_traiter = '../documents/'.$_COOKIE['RNE'].'/'; //le dossier à traiter $dossier_dans_archive = 'documents'; //le nom du dossier dans l'archive créée } } else { echo "RNE invalide.
\n"; $chemin_stockage=""; } } else { $dossier_a_traiter = '../documents/'; //le dossier à traiter $dossier_dans_archive = 'documents'; //le nom du dossier dans l'archive créée } if ($chemin_stockage !='') { $handle=opendir($dossier_a_traiter); $tab_file = array(); $n=0; $zip_error=0; $zip_debug="n"; while ($file = readdir($handle)) { if(preg_match("#^cl#", $file)) { if($zip_debug=='y') {echo "";} $enregistrer="y"; } else { if($zip_debug=='y') {echo "";} $enregistrer="n"; } if($zip_debug=='y') {echo "$fileError : ".$archive->errorInfo(true)."
"); } elseif($n>0) { echo "Le Zip a été créé ($n dossier(s) archivé(s)).
"; } else { echo "Aucun dossier de documents joints à une notice n'a été trouvé.
"; } } break; case "photos": $retour=cree_zip_archive_avec_msg_erreur("photos",1); if ($retour!="") die("".$retour."
\n"); break; default: $chemin_stockage = ''; echo "La nature de l'archivage à effectuer est inconnue.
"; } } } if(!isset($quitter_la_page)){ if(isset($_GET['chgt_annee'])) {$_SESSION['chgt_annee']="y";} echo "Retour"; } else { echo "
Refermer la page"; } // Test présence de fichiers htaccess if (!(file_exists("../backup/".$dirname."/.htaccess")) or !(file_exists("../backup/".$dirname."/.htpasswd"))) { echo "
\n"; echo "Le répertoire \"/backup\" n'est actuellement pas protégé. Si vous stockez des fichiers dans ce répertoire, ils seront accessibles de l'extérieur à l'aide d'un simple navigateur.
\n"; echo "\n"; echo "Deux méthodes de sauvegarde sont disponibles : l'utilisation de la commande système mysqldump ou bien le système intégré à Gepi.
La première méthode (mysqldump) est vigoureusement recommandée car beaucoup moins lourde en ressources, mais ne fonctionnera que sur certaines configurations serveurs.
La seconde méthode est lourde en ressources mais passera sur toutes les configurations.
Attention : pour utiliser la commande système mysqldump lorsque Gepi est hébergé sous Windows il faut au préalable copier le fichier "mysqldump.exe" dans le dossier "gestion" de Gepi. Ce fichier "mysqldump.exe" se trouve généralement dans le sous-dossier "bin" du dossier d'installation de MySQL.
Remarque : les répertoires 'documents' (contenant les documents joints aux cahiers de textes) et 'photos' (contenant les photos du trombinoscope) ne seront pas sauvegardés. Un outil de sauvegarde spécifique se trouve en bas de cette page.
Le tableau ci-dessous indique la liste des fichiers de restauration actuellement stockés dans le répertoire \"backup\" à la racine de GEPI.
\n"; // echo "Nom du fichier de sauvegarde |
---|
Nom du fichier de sauvegarde | ||||||
---|---|---|---|---|---|---|
\n"; echo ""; if(file_exists('../backup/'.$dirname.'/'.$value.'.txt')) { $handle = fopen('../backup/'.$dirname.'/'.$value.'.txt', "r"); $contents = fread($handle, filesize('../backup/'.$dirname.'/'.$value.'.txt')); fclose($handle); $contents=preg_replace('/"/', "", $contents); $titre_infobulle=$value; $texte_infobulle=nl2br($contents); $tabdiv_infobulle[]=creer_div_infobulle('div_description_svg_'.$m,$titre_infobulle,"",$texte_infobulle,"",30,0,'y','y','n','n'); echo ""; echo $value; echo ""; //$m++; } else { echo $value; } echo " (". round((filesize("../backup/".$dirname."/".$value)/1024),0)." Ko)\n"; echo " | \n"; echo "Supprimer | \n"; $type_sauvegarde=""; if (preg_match('/^_photos/i',$value)&& preg_match('/.zip$/i',$value))$type_sauvegarde="photos"; if (preg_match('/^_cdt/i',$value)&& preg_match('/.zip$/i',$value)) $type_sauvegarde="cdt"; if ((preg_match('/.sql.gz$/i',$value) || preg_match('/.sql$/i',$value))) $type_sauvegarde="base"; switch ($type_sauvegarde) { case "photos" : echo "\n"; break; case "base" : echo " | Restaurer | \n"; break; default : echo "\n"; break; } echo " | Télécharger | \n"; echo "Téléch. direct | \n"; echo "
Les fichiers d'export des absences en fin d'année sont générés dans le sous-dossier 'absences' du dossier de stockage des sauvegardes.
"; echo "Nom du fichier d'export | |||
---|---|---|---|
".$value." (". round((filesize("../backup/".$dirname."/absences/".$value)/1024),0)." Ko) | Supprimer | Télécharger | Téléch. direct |
Attention:
\n"; echo "Selon la configuration du serveur et la taille du fichier, l'opération de téléchargement vers le répertoire \"/backup\" peut échouer
(par exemple si la taille du fichier dépasse la taille maximale autorisée lors des téléchargements).
Si c'est le cas, signalez le problème à l'administrateur du serveur.
Variable | Valeur |
---|---|
post_max_size | $post_max_size |
upload_max_filesize | $upload_max_filesize |
ATTENTION : veillez à supprimer le fichier créé une fois l'archive téléchargée.
"; echo "\n"; echo "Les autres fichiers et dossiers devant être accessibles en écriture peuvent être contrôlés dans la page Configuration serveur";
echo "
\n";
echo " \n";
echo "