2
0

backup.class.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. // Importer les données dans la nouvelle base
  57. $importCommand = "mysql -h " . escapeshellarg(DB_HOST) . " -u " . escapeshellarg(DB_USER) . " -p" . escapeshellarg(DB_PASS) . " " . DB_NAME . " < " . escapeshellarg($_backupFile);
  58. system($importCommand, $importResult);
  59. if ($importResult !== 0) {
  60. alert::recError("Erreur : Échec lors de l'importation des données.");
  61. return false;
  62. }
  63. return true;
  64. }
  65. public static function scanFolder()
  66. {
  67. $tempArray = array();
  68. if ($scandir = scandir(DIR_BACKUP)) {
  69. foreach ($scandir as $file) {
  70. $tempFile = NULL;
  71. if (is_file(DIR_BACKUP . $file) === TRUE and $file != "index.html") {
  72. $tempFile["file"] = $file;
  73. $tempFile["size"] = core::formatFileSize(filesize(DIR_BACKUP . $file), 2);
  74. $tempFile["date"] = core::dateFromTimestamp(filemtime(DIR_BACKUP . $file));
  75. $tempFile["timestamp"] = filemtime(DIR_BACKUP . $file);
  76. $tempArray[] = $tempFile;
  77. }
  78. }
  79. }
  80. return $tempArray;
  81. }
  82. public static function last()
  83. {
  84. $return = [];
  85. foreach (self::scanFolder() as $key => $value) {
  86. $return[$value["timestamp"]] = $value;
  87. }
  88. krsort($return);
  89. return array_values($return)[0]["file"];
  90. }
  91. public static function delete(string $_nameBackup)
  92. {
  93. if(file_exists("/" . DIR_BACKUP . "/" . $_nameBackup)){
  94. unlink("/" . DIR_BACKUP . "/" . $_nameBackup);
  95. alert::recSuccess("BackUp :. Suppression de " . $_nameBackup);
  96. return TRUE;
  97. } else {
  98. alert::recError("BackUp :. Erreur lors de la suppression de " . $_nameBackup);
  99. return FALSE;
  100. }
  101. }
  102. }