if (!$is_check) { echo $m_langpackage->m_no_pri; exit; } $tabledb = get_argp('tabledb'); $start = (int) get_argg('start'); $tableid = (int) get_argg('tableid'); $bak = "/* iweb_sns Backup SQL File \n Version: v1.0.0 \n Time: " . date('Y-m-d H:i:s') . "\n iweb_sns: http://www.jooyea.net*/\n\n\n\n"; $bakupdata = bakupdata($dbo, $tabledb, $start); if (!$tabledb) { echo "<script language='javascript'> alert('{$d_langpackage->d_boject_no}'); history.go(-1);</script>"; } $step = 1; $rand_num = num_rand(10); $start = 0; $bakuptable = bakuptable($dbo, $tabledb); $f_num = ceil($step / 2); $filename = 'isns_' . date('m-d') . '_' . $rand_num . '_' . $f_num . '.sql'; $step++; $writedata = $bakuptable ? $bakuptable . $bakupdata : $bakupdata; $c_n = $startfrom; trim($writedata) && writefile('../docs/' . $filename, $bak . $writedata, true, 'ab'); if ($step > 1) { for ($i = 1; $i <= $f_num; $i++) { $temp = substr($filename, 0, 19) . $i . ".sql"; if (file_exists("../docs/{$temp}")) { $bakfile .= '<a href="' . "../docs/{$temp}" . '">' . $temp . '</a><br>'; } } } echo "<script language='javascript'> alert('{$d_langpackage->d_backup_suc}'); location.href='database.recover.php'; </script>";
$tableid = (int) $_GET['tableid']; $step = (int) $_GET['step']; $tablesel = $_GET['tablesel']; $aaa = $_GET['aaa']; $rows = $_GET['rows']; !$tabledb && !$tablesel && alert('没有选择操作对象'); !$tabledb && ($tabledb = explode("|", $tablesel)); !$step && ($sizelimit /= 2); $bakupdata = bakupdata($tabledb, $start); if (!$step) { !$tabledb && alert('没有选择操作对象'); $tablesel = implode("|", $tabledb); $step = 1; $aaa = num_rand(10); $start = 0; $bakuptable = bakuptable($tabledb); } $f_num = ceil($step / 2); $filename = 'iCMS_' . get_date('', "md") . '_' . $aaa . '_' . $f_num . '.sql'; $step++; $writedata = $bakuptable ? $bakuptable . $bakupdata : $bakupdata; $t_name = $tabledb[$tableid - 1]; $c_n = $startfrom; if ($stop == 1) { $files = $step - 1; trim($writedata) && writefile(iPATH . 'admin/data/' . $filename, $bak . $writedata, true, 'ab'); redirect("正在备份数据库表{$t_name}: 共{$rows}条记录<br>已经备份至{$c_n}条记录,已生成{$f_num}个备份文件,<br>程序将自动备份余下部分", __SELF__ . "?do=database&operation=savebackup&start={$startfrom}&tableid={$tableid}&sizelimit={$sizelimit}&step={$step}&aaa={$aaa}&tablesel={$tablesel}&rows={$rows}", 3); } else { trim($writedata) && writefile(iPATH . 'admin/data/' . $filename, $bak . $writedata, true, 'ab'); if ($step > 1) { for ($i = 1; $i <= $f_num; $i++) {
/** *备份数据库 *@param $table 要备份的表名 *备份原理: *备份文件 *一表一文件备 *单表文件大于2048K时,自动创建新文件! *首次生成数据结构表!该表起总纲作用! */ function backup_action($table) { global $dbm, $dbkdir; $tables = implode(',', $table); $array = array(); if (!is_array($table) && empty($table)) { return $array; } if (!file_exists($dbkdir . DB_DBNAME . ".sql")) { for ($i = 0; $i < count($table); $i++) { $array[$i] = bakuptable($table[$i]); } $table_struct = implode("\n", $array); $handle = fopen($dbkdir . DB_DBNAME . ".sql", "wb"); fputs($handle, $table_struct); fclose($handle); unset($table_struct); //释放内存 } //表ID下标 $tableid = isset($_GET["tableid"]) ? intval($_GET["tableid"]) : 0; //limit起始值 $startid = isset($_GET["startid"]) ? intval($_GET["startid"]) : 0; //分卷编号 $pageid = isset($_GET["pageid"]) ? intval($_GET["pageid"]) : 0; //开始内容备份 if ($tableid < count($table)) { $tablename = $table[$tableid]; //统计当前表的记录总数 $ret = $dbm->query("select count(1) as c from " . $tablename); $count = $ret['list'][0]['c']; $per_size = 1000; //最大数不超过1000 if ($count < $per_size) { $per_size = $count; } if ($count && $startid < $count) { $res = $dbm->query("select * from " . $tablename . " limit " . $startid . "," . $per_size); $bakupdata = ''; foreach ($res['list'] as $k => $v) { $tablefields = implode("`,`", array_keys($v)); $tablevalues = preg_replace('~(\\n)|(\\r)~', '', implode("','", array_values($v))); $bakupdata .= "INSERT INTO {$tablename} (`" . $tablefields . "`) "; $bakupdata .= "VALUES ('" . $tablevalues . "');\n"; $startid++; if (strlen($bakupdata) > 2048 * 1024) { $handle = fopen($dbkdir . $tablename . "_" . $pageid . ".sql.", "wb"); fputs($handle, $bakupdata); fclose($handle); unset($bakupdata); $selfurl = "dbbak.php?m=save&tableid=" . $tableid . "&startid=" . $startid . "&pageid=" . ($pageid + 1) . "&table={$tables}"; echo '<script type="text/javascript">setTimeout(function(){window.location.href="' . $selfurl . '";},1000);</script>'; echo '<br />'; echo "正在备份数据表 <font color='red'>" . $tablename . "</font> 信息,当前已经写入第 " . ($pageid + 1) . " 页,即将写入第 " . ($pageid + 2) . " 页信息"; die; } } if ($bakupdata) { if ($pageid > 0) { $data = file_get_contents($dbkdir . $tablename . '_' . ($pageid - 1) . ".sql"); if (strlen($data) < 2048 * 1024) { $handle = fopen($dbkdir . $tablename . '_' . ($pageid - 1) . ".sql", "ab"); fputs($handle, $bakupdata); fclose($handle); unset($bakupdata, $data); $newpageid = $pageid; } else { $handle = fopen($dbkdir . $tablename . "_" . $pageid . ".sql", "wb"); fputs($handle, $bakupdata); fclose($handle); unset($bakupdata); $newpageid = $pageid + 1; } } else { $handle = fopen($dbkdir . $tablename . "_" . $pageid . ".sql", "wb"); fputs($handle, $bakupdata); fclose($handle); unset($bakupdata); $newpageid = $pageid + 1; } } if ($startid < $count) { $selfurl = "dbbak.php?m=save&tableid=" . $tableid . "&startid=" . $startid . "&pageid=" . $newpageid . "&table={$tables}"; echo '<script type="text/javascript">setTimeout(function(){window.location.href="' . $selfurl . '";},1000);document.write("正在备份数据表 ' . $tablename . ' 信息。");</script>'; die; } else { $selfurl = "dbbak.php?m=save&tableid=" . ($tableid + 1) . "&table={$tables}"; echo '<script type="text/javascript">setTimeout(function(){window.location.href="' . $selfurl . '";},1000);document.write("数据表 ' . $tablename . ' 信息已经备份完毕,将开始备份下一个数据表!");</script>'; die; } } else { $selfurl = "dbbak.php?m=save&tableid=" . ($tableid + 1) . "&table={$tables}"; echo '<script type="text/javascript">setTimeout(function(){window.location.href="' . $selfurl . '";},1000);document.write("数据表 ' . $tablename . ' 信息为空,将开始下一个数据表信息备份");</script>'; die; } } else { //die('{"code":"100","msg":"数据已经备份完毕!"}'); logs("数据库已经备份完毕!:数据库名称=" . DB_DBNAME); echo "<font color='red'>数据已经备份完毕!</font>"; die('<script>setTimeout(function(){parent.window.location.href="dbbak.php";},3000);</script>'); } }