| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- /**
- * Classe `backup`
- *
- * Cette classe gère les opérations de sauvegarde et de restauration des données.
- *
- * Fonctionnalités principales :
- * - Création de sauvegardes incluant la base de données et les fichiers.
- * - Restauration des sauvegardes à partir de fichiers ZIP.
- * - Gestion des fichiers de sauvegarde (scan, suppression, récupération du dernier fichier).
- *
- * @package Core\Class
- */
- class backup
- {
- /**
- * Crée un fichier de sauvegarde (backup) contenant la base de données et les fichiers.
- *
- * @return bool TRUE si la sauvegarde a été créée avec succès, FALSE en cas d'erreur.
- */
- public static function create()
- {
- try {
- $nameNewFolder = date("Ymd-His");
- $newFolder = DIR_TEMP . $nameNewFolder;
- mkdir($newFolder, 0777);
- self::dumpMysql($newFolder);
- file::copyFolder(DIR_DATAS, $newFolder . "/datas");
- $localZip = file::zip($newFolder, DIR_TEMP . $nameNewFolder);
- file::deleteFolder($newFolder);
- rename($localZip, DIR_BACKUP . $nameNewFolder . ".zip");
- alert::recSuccess("BackUp OK :. " . $nameNewFolder . ".zip");
- return TRUE;
- } catch (Exception $ex) {
- alert::recError("BackUp :. Erreur lors de la création");
- return FALSE;
- }
- }
- /**
- * Restaure un fichier de sauvegarde (backup).
- *
- * @param string $_zip Le chemin du fichier ZIP à restaurer.
- * @return bool TRUE si la restauration a réussi, FALSE en cas d'erreur.
- */
- public static function restore(string $_zip)
- {
- $tmpZip = str_replace(DIR_BACKUP, DIR_TEMP, $_zip);
- $tmpDatas = date("Ymd-His") . "-datas";
- copy($_zip, $tmpZip);
- $folder = file::unzip($tmpZip, DIR_TEMP);
- if(self::dumpMysqlRestore(DIR_TEMP . $folder . "/" . DB_NAME . ".Mysql")){
- rename(DIR_DATAS, DIR_TEMP . $tmpDatas);
- file::copyFolder(DIR_TEMP . $folder . "/datas", DIR_DATAS);
- if(is_dir(DIR_DATAS)){
- file::deleteFolder(DIR_TEMP . $tmpDatas);
- unlink($tmpZip);
- file::deleteFolder(DIR_TEMP . $folder);
- $zipInfo = pathinfo($_zip);
- alert::recSuccess("Restauration du backUp OK :. " . $zipInfo["filename"] . ".zip");
- return TRUE;
- }
- }
- alert::recError("Restauration du backUp :. Erreur lors du backup");
- return FALSE;
- }
- /**
- * Crée un dump de la base de données MySQL.
- *
- * @param string $_dir Le répertoire où le dump sera enregistré.
- * @return string|bool Le nom du fichier de dump ou FALSE en cas d'erreur.
- */
- public static function dumpMysql(string $_dir)
- {
- $backupFile = DB_NAME . ".Mysql";
- $command = "mysqldump --opt -h " . DB_HOST . " -u " . DB_USER . " -p" . DB_PASS . " " . DB_NAME . " > " . $_dir . "/" . $backupFile;
- try {
- system($command);
- return $backupFile;
- } catch (Exception $ex) {
- return FALSE;
- }
- }
- /**
- * Restaure une base de données MySQL à partir d'un fichier de dump.
- *
- * @param string $_backupFile Le chemin du fichier de dump à restaurer.
- * @return bool TRUE si la restauration a réussi, FALSE en cas d'erreur.
- */
- public static function dumpMysqlRestore(string $_backupFile)
- {
- $importCommand = "mysql -h " . escapeshellarg(DB_HOST) . " -u " . escapeshellarg(DB_USER) . " -p" . escapeshellarg(DB_PASS) . " " . DB_NAME . " < " . escapeshellarg($_backupFile);
- system($importCommand, $importResult);
- if ($importResult !== 0) {
- alert::recError("Erreur : Échec lors de l'importation des données.");
- return false;
- }
- return true;
- }
- /**
- * Scanne le dossier des sauvegardes pour récupérer les fichiers disponibles.
- *
- * @return array Un tableau contenant les informations des fichiers de sauvegarde.
- */
- public static function scanFolder()
- {
- $tempArray = array();
- if ($scandir = scandir(DIR_BACKUP)) {
- foreach ($scandir as $file) {
- $tempFile = NULL;
- if (is_file(DIR_BACKUP . $file) === TRUE and $file != "index.html") {
- $tempFile["file"] = $file;
- $tempFile["size"] = core::formatFileSize(filesize(DIR_BACKUP . $file), 2);
- $tempFile["date"] = core::dateFromTimestamp(filemtime(DIR_BACKUP . $file));
- $tempFile["timestamp"] = filemtime(DIR_BACKUP . $file);
- $tempArray[] = $tempFile;
- }
- }
- }
- return $tempArray;
- }
- /**
- * Récupère le dernier fichier de sauvegarde disponible.
- *
- * @return string Le nom du dernier fichier de sauvegarde.
- */
- public static function last()
- {
- $return = [];
- foreach (self::scanFolder() as $key => $value) {
- $return[$value["timestamp"]] = $value;
- }
- krsort($return);
- return array_values($return)[0]["file"];
- }
- /**
- * Supprime un fichier de sauvegarde.
- *
- * @param string $_nameBackup Le nom du fichier de sauvegarde à supprimer.
- * @return bool TRUE si la suppression a réussi, FALSE en cas d'erreur.
- */
- public static function delete(string $_nameBackup)
- {
- if(file_exists("/" . DIR_BACKUP . "/" . $_nameBackup)){
- unlink("/" . DIR_BACKUP . "/" . $_nameBackup);
- alert::recSuccess("BackUp :. Suppression de " . $_nameBackup);
- return TRUE;
- } else {
- alert::recError("BackUp :. Erreur lors de la suppression de " . $_nameBackup);
- return FALSE;
- }
- }
- }
|