open($destinationPath . $zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE)
{
exit("Impossible de créer ou d'ouvrir ou créer le fichier data/" . $zipFileName . ".
Il est possible que ce fichier existe déjà et soit interdit en écriture.
Retour au site
");
}
$compteur = 0;
// recherche récursive dans les dossiers dans $directories
foreach($targetDirectories as $path)
{
// les deux lignes suivantes reviennent à utiliser le paramètre "-r" dans la console
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory);
foreach ($iterator as $info)
{
// chemins inutiles . et ..
if($info->getFilename() != "." && $info->getFilename() != "..")
{
$Zip->addGlob($info->getPathname(), 0, array(''));
$compteur++;
}
}
}
// recherche à la racine avec des pattern de noms de fichiers
// possibilité d'un tableau vide (paramètre optionnel)
foreach($allPattern as $onePattern)
{
$Zip->addGlob($onePattern, 0, array(''));
}
$Zip->close();
if($compteur > 0)
{
chmod($destinationPath . $zipFileName, 0666); // en octal
}
else
{
$_SESSION['erreur'] = "Extraction des données impossible, le site entier est vide.";
}
}
function restaurer($from)
{
$title = 'Restauration des données';
$message = '';
// recharger la même page en écrivant les données
if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0)
{
// détecter le format (zip ou autre)
// une copie du zip est conservée dans data/ au cas où
move_uploaded_file($_FILES['archive']['tmp_name'], 'data/' . $_FILES['archive']['name']);
chmod('data/' . $_FILES['archive']['name'], 0666);
$nomFichier = 'data/' . $_FILES['archive']['name'];
// extraction
try
{
$Zip = new ZipArchive();
}
catch (Throwable $e) // l'extension zip n'est pas activée
{
echo($e);
die();
}
if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE)
{
$j = 0;
for($i = 0; $i < $Zip->numFiles; $i++)
{
$nomEntree = $Zip->getNameIndex($i);
if($Zip->extractTo('.', $nomEntree) === TRUE)
{
$j++;
}
else
{
$message = 'Erreur: extraction du zip impossible.
';
}
chmod($nomEntree, 0666);
}
if($j == $Zip->numFiles)
{
$message = 'Restauration réussie !!
';
}
$Zip->close();
}
else
{
// mauvais fichier
$message = 'Erreur: Impossible d\'ouvrir l\'archive Zip."
';
}
}
elseif(isset($_FILES['archive']) && $_FILES['archive']['error'] != 0)
{
$message = 'Erreur: Le fichier n\'a pas pu être téléchargé correctement."
';
}
require('view/backup.php');
}