Mise en oeuvre du script (ne pas oublier de remplacer les variables par les vôtres)
<?php
include( __DIR__ .'/functions.php');
include( __DIR__ .'/config.php');
/***********************************************************************
Configuration du fichier à restaurer
***********************************************************************/
$siteToRestaure = 'nom_site_1'; //Nom du site à restaurer (doit impérativement correspondre à un nom de la variable $configuration du fichier config)
$vars = $configuration[$siteToRestaure];
$siteRoot = $vars['siteRoot'];
$table = "backup_".$siteToRestaure;
/***********************************************************************
EXECUTION DE LA RESTAURATION
***********************************************************************/
// Facultatif (décommenter les lignes suivantes uniquement si la base en place n'est pas à jour et s'assurer que le fichier config est bien renseigné pour les accès à la base de données)
/*
$dumpToRestaure = '/chemin/absolu/vers/archive.sql.gz';
if(file_exists($dumpToRestaure)){
$command = "gunzip < $dumpToRestaure | mysql --host=".$vars['dbConnect']['host']." --user=".$vars['dbConnect']['user']." --password=".$vars['dbConnect']['password']." ".$vars['dbConnect']['db'];
system($command);
$content .= "La restauration de la base de données a été effectuées avec succès"."n";
}
else {
$content .= "Le fichier '".$dumpToRestaure."' est introuvable. La restauration a été annulée."."n";
$backupFailure = 'File not found';
$subject = "Echec de la restauration de la base de données
}
*/
if(!isset($backupFailure)){
$subject = "Restauration du site $siteToRestaure";
$db = new connexion($vars['dbConnect']['host'], $vars['dbConnect']['user'], $vars['dbConnect']['password'], $vars['dbConnect']['db']);
$db->set_charset("utf8");
$sql = "SELECT * FROM $table ORDER BY type, path";
$qry = $db->query($sql);
if($qry->num_rows > 0){
if (!is_dir($siteRoot)) {
//Si la racine n'existe pas, essaye de créer le répertoire en attribuant les droits du répertoire précédent
mkdir($siteRoot,0644);
$reps = explode('/',$siteRoot);
$racine = '';
for($i=1; $i< (sizeof($reps)-1);$i++){ $racine .= '/'.$reps[$i]; }
$racineOwner = posix_getpwuid(fileowner($racine));
$racineGroup = posix_getgrgid(filegroup($racine));
chown($siteRoot,$racineOwner);
chgrp($siteRoot,$racineGroup['name']);
}
while ($r = $qry->fetch_array()){
$mode = octdec( str_pad($r['permissions'],4,'0',STR_PAD_LEFT) );
if($r['type'] == 'DIR'){
if (!is_dir($siteRoot.'/'.$r['path'])) mkdir($siteRoot.'/'.$r['path'],$mode);
}
if($r['type'] == 'FILE' && !file_exists($siteRoot.'/'.$r['path'])){
file_write($siteRoot.'/'.$r['path'],$r['content']);
chmod($siteRoot.'/'.$r['path'],$mode);
}
chown($siteRoot.'/'.$r['path'],$r['owner_name']);
chgrp($siteRoot.'/'.$r['path'],$r['group_name']);
}
$nbre = $qry->num_rows;
$qry->close();
$content .= 'Site "'.$siteToRestaure.'" restauré dans le répertoire "'.$siteRoot.'" ('.$nbre.' fichiers)'."n";
}
else $content .='Pas de fichiers trouvés pour le site '.$siteToRestaure."n";
}
/*************************************************************************************
Fin du script - génération et envoi du rapport
**************************************************************************************/
$fin = microtime(true);
$content .= "Script terminé - Temps d'exécution : ".duree($debut,$fin)."n";
envoyer($subject,$content);
?>