/** * Восстанавливает базу данных из резервной копии. * @param type $BackupFile Имя файла бекапа * @param type $Table Имя таблицы, если нужно восстановить одну таблицу */ public function RestoreBackupFile($BackupFile, $Table = '') { $zip = new ZipArchive(); $iferrors = false; if (GetSecondFileExt($BackupFile, true) == $this->Name && $zip->open($BackupFile) === true) { for ($i = 0; $i < $zip->numFiles; $i++) { $filename = $zip->getNameIndex($i); if ($Table == '' || $Table == GetFileName($filename, true)) { $sql = $zip->getFromIndex($i); $sql = explode(";", $sql); foreach ($sql as $query) { if (trim($query) == '') { continue; } if (System::database()->MySQLQuery($query) === false) { if (defined('ADMIN_SCRIPT')) { System::admin()->HighlightError(System::database()->MySQLGetErrMsg() . ' (' . $filename . ')'); } $iferrors = true; } } } } $zip->close(); // Обрабытываем ошибки if ($iferrors) { return 2; // Ошибки при восстановлении таблиц } return 1; // Успешно восстановлено } else { return 3; // Неверный формат файла } }
$.ajax({ type: "POST", url: "' . ADMIN_FILE . '?exe=dbadmin&a=backup_create", data: {}, success: function(data){ Admin.LoadPage("' . ADMIN_FILE . '?exe=dbadmin&a=backups", undefined, "Обновление страницы"); Admin.HideSplashScreen(); } }); }; '); $backup_files = GetFiles($backup_dir, false, true, '.zip'); rsort($backup_files, SORT_STRING); $backup_files2 = array(); foreach ($backup_files as $file) { if (GetSecondFileExt($file, true) == System::database()->Name) { $backup_files2[] = $file; } } $text = ''; $text .= '<table cellspacing="0" cellpadding="0" class="cfgtable">'; $text .= '<tr><th>Имя файла (дата-время...)</th><th>Функции</th></tr>'; foreach ($backup_files2 as $file) { $file = SafeDB($file, 255, str); $func = System::admin()->SpeedConfirm('Восстановить', ADMIN_FILE . '?exe=dbadmin&a=backup_restore&name=' . $file, 'images/admin/restore.png', 'Все текущие данные будут затёрты. Восстановить БД из резервной копии?'); $func .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=dbadmin&a=backup_delete&name=' . $file, 'images/admin/delete.png', 'Удалить?'); $text .= '<tr> <td><a href="' . $backup_dir . $file . '">' . $file . '</a></td> <td>' . $func . '</td> </tr>'; }
/** * Восстанавливает базу данных из резервной копии. * @param string $BackupFile Имя файла бекапа * @param string $Table Имя таблицы, если нужно восстановить одну таблицу * @return int */ public function RestoreBackupFile($BackupFile, $Table = '') { $zip = new ZipArchive(); $iferrors = false; if (GetSecondFileExt($BackupFile, true) == $this->Name && $zip->open($BackupFile) === true) { $dbhost = $this->DbAccess; $to_unpack = array(); for ($i = 0; $i < $zip->numFiles; $i++) { $filename = $zip->getNameIndex($i); if ($Table == '' || $Table == GetFileName($filename, true)) { $to_unpack[] = $filename; } } if (!$zip->extractTo($dbhost, $to_unpack)) { $iferrors = true; } $zip->close(); // Обрабытываем ошибки if ($iferrors) { return 2; // Ошибки при восстановлении таблиц } return 1; // Успешно восстановлено } else { return 3; // Неверный формат файла } }