backup.class.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. class backup
  3. {
  4. public static function create()
  5. {
  6. try {
  7. $nameNewFolder = date("Ymd-His");
  8. $newFolder = DIR_TEMP . $nameNewFolder;
  9. mkdir($newFolder, 0777);
  10. self::dumpMysql($newFolder);
  11. file::copyFolder(DIR_DATAS, $newFolder . "/datas");
  12. $localZip = file::zip($newFolder, DIR_TEMP . $nameNewFolder);
  13. file::deleteFolder($newFolder);
  14. rename($localZip, DIR_BACKUP . $nameNewFolder . ".zip");
  15. alert::recSuccess("BackUp OK :. " . $nameNewFolder . ".zip");
  16. return TRUE;
  17. } catch (Exception $ex) {
  18. alert::recError("BackUp :. Erreur lors de la création");
  19. return FALSE;
  20. }
  21. }
  22. public static function restore(string $_zip)
  23. {
  24. $tmpZip = str_replace(DIR_BACKUP, DIR_TEMP, $_zip);
  25. $tmpDatas = date("Ymd-His") . "-datas";
  26. copy($_zip, $tmpZip);
  27. $folder = file::unzip($tmpZip, DIR_TEMP);
  28. if(self::dumpMysqlRestore(DIR_TEMP . $folder . "/" . DB_NAME . ".Mysql")){
  29. rename(DIR_DATAS, DIR_TEMP . $tmpDatas);
  30. file::copyFolder(DIR_TEMP . $folder . "/datas", DIR_DATAS);
  31. if(is_dir(DIR_DATAS)){
  32. file::deleteFolder(DIR_TEMP . $tmpDatas);
  33. unlink($tmpZip);
  34. file::deleteFolder(DIR_TEMP . $folder);
  35. $zipInfo = pathinfo($_zip);
  36. alert::recSuccess("Restauration du backUp OK :. " . $zipInfo["filename"] . ".zip");
  37. return TRUE;
  38. }
  39. }
  40. alert::recError("Restauration du backUp :. Erreur lors du backup");
  41. return FALSE;
  42. }
  43. public static function dumpMysql(string $_dir)
  44. {
  45. $backupFile = DB_NAME . ".Mysql";
  46. $command = "mysqldump --opt -h " . DB_HOST . " -u " . DB_USER . " -p" . DB_PASS . " " . DB_NAME . " > " . $_dir . "/" . $backupFile;
  47. try {
  48. system($command);
  49. return $backupFile;
  50. } catch (Exception $ex) {
  51. return FALSE;
  52. }
  53. }
  54. public static function dumpMysqlRestore(string $_backupFile)
  55. {
  56. // Étape 1 : Suppression de l'ancienne base
  57. $dropCommand = "mysql -h " . escapeshellarg(DB_HOST) . " -u " . escapeshellarg(DB_USER) . " -p" . escapeshellarg(DB_PASS) . " -e 'DROP DATABASE IF EXISTS `" . DB_NAME . "`;'";
  58. system($dropCommand, $dropResult);
  59. if ($dropResult !== 0) {
  60. alert::recError("Erreur : Impossible de supprimer la base existante.");
  61. return false;
  62. }
  63. // Étape 2 : Création de la nouvelle base
  64. $createCommand = "mysql -h " . escapeshellarg(DB_HOST) . " -u " . escapeshellarg(DB_USER) . " -p" . escapeshellarg(DB_PASS) . " -e 'CREATE DATABASE " . DB_NAME . ";'";
  65. system($createCommand, $createResult);
  66. if ($createResult !== 0) {
  67. alert::recError("Erreur : Impossible de créer la nouvelle base.");
  68. return false;
  69. }
  70. // Étape 3 : Importer les données dans la nouvelle base
  71. $importCommand = "mysql -h " . escapeshellarg(DB_HOST) . " -u " . escapeshellarg(DB_USER) . " -p" . escapeshellarg(DB_PASS) . " " . DB_NAME . " < " . escapeshellarg($_backupFile);
  72. system($importCommand, $importResult);
  73. if ($importResult !== 0) {
  74. alert::recError("Erreur : Échec lors de l'importation des données.");
  75. return false;
  76. }
  77. return true;
  78. }
  79. public static function scanFolder()
  80. {
  81. $tempArray = array();
  82. if ($scandir = scandir(DIR_BACKUP)) {
  83. foreach ($scandir as $file) {
  84. $tempFile = NULL;
  85. if (is_file(DIR_BACKUP . $file) === TRUE and $file != "index.html") {
  86. $tempFile["file"] = $file;
  87. $tempFile["size"] = core::formatFileSize(filesize(DIR_BACKUP . $file), 2);
  88. $tempFile["date"] = core::dateFromTimestamp(filemtime(DIR_BACKUP . $file));
  89. $tempFile["timestamp"] = filemtime(DIR_BACKUP . $file);
  90. $tempArray[] = $tempFile;
  91. }
  92. }
  93. }
  94. return $tempArray;
  95. }
  96. public static function last()
  97. {
  98. $return = [];
  99. foreach (self::scanFolder() as $key => $value) {
  100. $return[$value["timestamp"]] = $value;
  101. }
  102. krsort($return);
  103. return array_values($return)[0]["file"];
  104. }
  105. public static function delete(string $_nameBackup)
  106. {
  107. if(file_exists("/" . DIR_BACKUP . "/" . $_nameBackup)){
  108. unlink("/" . DIR_BACKUP . "/" . $_nameBackup);
  109. alert::recSuccess("BackUp :. Suppression de " . $_nameBackup);
  110. return TRUE;
  111. } else {
  112. alert::recError("BackUp :. Erreur lors de la suppression de " . $_nameBackup);
  113. return FALSE;
  114. }
  115. }
  116. }