From 2d2bca5e230bbb616e423be3ddf9f2f5f943f1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Thu, 5 Dec 2024 18:11:03 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20m=C3=A9thode=20de?= =?UTF-8?q?=20backup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 1 + core/class/helper.class.php | 29 +++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 21e485f2..fb2be792 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ - Validation de la connexion au site grâce à l'envoi d'un code par email. L'option est activée depuis la configuration du site, onglet connexion. Elle s'active par groupe montant, exemple "éditeur" pour éditeurs et administrateurs. - Optimisation du chargement des variables de classe. - Suppression de redondance de déclaration des charset. +- Méthode de backup optimisée. **Corrections :** - Corrige un bug de changement de mot de passe pour les comptes non admin. diff --git a/core/class/helper.class.php b/core/class/helper.class.php index f8853c3c..a46a9e2e 100644 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -197,14 +197,20 @@ class helper public static function autoBackup($folder, $filter = ['backup', 'tmp']) { - // Creation du ZIP + // Création du nom de fichier ZIP $baseName = str_replace('/', '', helper::baseUrl(false, false)); $baseName = empty($baseName) ? 'ZwiiCMS' : $baseName; - $fileName = $baseName . '-backup-' . date('Y-m-d-H-i-s', time()) . '.zip'; + $fileName = $baseName . '-backup-' . date('Y-m-d-H-i-s') . '.zip'; + + // Initialisation de l'archive ZIP $zip = new ZipArchive(); - $zip->open($folder . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE); + if ($zip->open($folder . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) { + return false; // Retourne false si l'ouverture échoue + } + $directory = 'site/'; - //$filter = array('backup','tmp','file'); + + // Récupération des fichiers et des dossiers $files = new RecursiveIteratorIterator( new RecursiveCallbackFilterIterator( new RecursiveDirectoryIterator( @@ -212,20 +218,27 @@ class helper RecursiveDirectoryIterator::SKIP_DOTS ), function ($fileInfo, $key, $iterator) use ($filter) { - return $fileInfo->isFile() || !in_array($fileInfo->getBaseName(), $filter); + // Inclure les fichiers ou les répertoires non filtrés + return $fileInfo->isFile() || ($fileInfo->isDir() && !in_array($fileInfo->getBaseName(), $filter)); } ) ); - foreach ($files as $name => $file) { + + // Ajout des fichiers à l'archive + foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); - $relativePath = substr($filePath, strlen(realpath($directory)) + 1); + $relativePath = str_replace(DIRECTORY_SEPARATOR, '/', substr($filePath, strlen(realpath($directory)) + 1)); $zip->addFile($filePath, $relativePath); } } + + // Fermeture de l'archive ZIP $zip->close(); - return ($fileName); + + return $fileName; } +