@set_time_limit(TIME_LIMIT); } $timer = array_sum(explode(' ', microtime())); ob_implicit_flush(); $auth = 0; $error = ''; if (@mysql_connect(DBHOST, DBNUSER, DBPASS)) { $auth = 1; } else { $error = '#' . mysql_errno() . ': ' . mysql_error(); } if (!file_exists(PATH)) { @mkdir(PATH, 0777) || die("Не удалось создать каталог для бекапа"); @chmod(PATH, 0777); } $SK = new dumper(); define('C_DEFAULT', 1); define('C_RESULT', 2); define('C_ERROR', 3); define('C_WARNING', 4); $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ''; switch ($action) { case 'backup': $SK->backup(); break; case 'restore': $SK->restore(); break; default: $SK->main(); }
Common::check_priv("{$priv}"); require_once BASE_PATH . '/lib/class.db_backup.php'; $dumper = new dumper(); $dumper->backup($_POST['filter'], $_POST['pack'], $_POST['pack_rate']); $smarty->assign("file_name", $dumper->filename); $smarty->assign("tables_list", $dumper->tables_list); $smarty->assign("table_size", $dumper->table_size); $smarty->assign("file_size", $dumper->file_size); $smarty->assign("tables_count", $dumper->tables_count); $smarty->assign("rows_count", $dumper->rows_count); $smarty->assign("action", "backup"); } if (isset($_POST['submit_restore'])) { Common::check_priv("0"); require_once BASE_PATH . '/lib/class.db_backup.php'; $dumper = new dumper(); if (isset($_POST['file']) && $_POST['file'] != '') { $dumper->restore($_POST['file']); } $smarty->assign("file_date", $dumper->file_date); $smarty->assign("q_number", $dumper->q_number); $smarty->assign("t_number", $dumper->t_number); $smarty->assign("r_number", $dumper->r_number); $smarty->assign("action", "restore"); } if ($_SESSION['fw_user']['priv'] == '0') { foreach (glob(BASE_PATH . "/backup/" . DB_NAME . "_*.*") as $filename) { $filename = explode("/", $filename); $files_list[] = $filename[count($filename) - 1]; } if (isset($files_list)) {
// Можно также указывать сравнение нужное к примеру 'cp1251_general_ci' или 'forced->cp1251_general_ci' define('RESTORE_CHARSET', 'cp1251'); // Типы таблиц у которых сохраняется только структура, разделенные запятой define('ONLY_CREATE', 'MRG_MyISAM,MERGE,HEAP,MEMORY'); // Дальше ничего редактировать не нужно tep_set_time_limit(0); if (function_exists("ob_implicit_flush")) { ob_implicit_flush(); } if (!function_exists('tep_db_fetch_row')) { function tep_db_fetch_row($db_query) { return mysql_fetch_row($db_query); } } $dump = new dumper(); class dumper { function dumper() { $this->SET['comp_method'] = ''; $this->SET['comp_level'] = 5; $this->backup_file = $this->restore_file = ''; $this->comp_methods = array(); // Версия MySQL вида 40101 preg_match("/^(\\d+)\\.(\\d+)\\.(\\d+)/", mysql_get_server_info(), $m); $this->mysql_version = sprintf("%d%02d%02d", $m[1], $m[2], $m[3]); $this->only_create = explode(',', ONLY_CREATE); $this->forced_charset = false; $this->restore_charset = $this->restore_collate = ''; if (preg_match("/^(forced->)?(([a-z0-9]+)(\\_\\w+)?)\$/", RESTORE_CHARSET, $matches)) {
// Автоудаление дампов БД. "0" - выкл, "1" - вкл. $result = db_query("select last_update from " . DUMP_TABLE . " where type=1"); $results = db_fetch_row($result); $last_update = $results["last_update"]; if (time() - $last_update > $interval_update * 3600) { $querys = "update " . DUMP_TABLE . " set last_update = '" . time() . "' where type=1"; $results = db_query($querys); $path = "core/backup"; if (!is_dir($path)) { return false; } $handle = opendir($path); $patterns[0] = "/-/"; $replacements[0] = ":"; while (false !== ($file = readdir($handle))) { if (preg_match("/dump_20(.*?)\\.sql\\.gz/", $file, $matches)) { preg_match("/(.*?)_(.*)/", $matches[1], $matches); $filedate = $matches[1]; $filetime = preg_replace($patterns, $replacements, $matches[2]); $filetimestamp = strtotime($filedate . " " . $filetime); if (time() - $delete_interval * 3600 >= $filetimestamp && $deletedump > 0) { unlink($path . "/" . $file); } } } closedir($handle); include_once 'core/classes/class.dump.php'; $SK = new dumper(); $SK->backup(); } }