$gotojs"; /*-------------------- 备份数据 function __bak_data(); --------------------*/ if ($dopost == 'bak') { if (empty($tablearr)) { ShowMsg('你没选中任何表!', 'javascript:;'); exit(); } if (!is_dir($bkdir)) { MkdirAll($bkdir, $cfg_dir_purview); CloseFtp(); } //初始化使用到的变量 $tables = explode(',', $tablearr); if (!isset($isstruct)) { $isstruct = 0; } if (!isset($startpos)) { $startpos = 0; } if (!isset($iszip)) { $iszip = 0; } if (empty($nowtable)) { $nowtable = ''; } if (empty($fsize)) { $fsize = 2048; } $fsizeb = $fsize * 1024; //第一页的操作 if ($nowtable == '') { $tmsg = ''; $dh = dir($bkdir); while ($filename = $dh->read()) { if (!preg_match("#txt$#", $filename)) { continue; } $filename = $bkdir . "/$filename"; if (!is_dir($filename)) { unlink($filename); } } $dh->close(); $tmsg .= "清除备份目录旧数据完成...
"; if ($isstruct == 1) { $bkfile = $bkdir . "/tables_struct_" . substr(md5(time() . mt_rand(1000, 5000) . $cfg_cookie_encode), 0, 16) . ".txt"; $mysql_version = $dsql->GetVersion(); $fp = fopen($bkfile, "w"); foreach ($tables as $t) { fwrite($fp, "DROP TABLE IF EXISTS `$t`;\r\n\r\n"); $dsql->SetQuery("SHOW CREATE TABLE " . $dsql->dbName . "." . $t); $dsql->Execute('me'); $row = $dsql->GetArray('me', MYSQL_BOTH); // 去除AUTO_INCREMENT $row[1] = preg_replace("#AUTO_INCREMENT=([0-9]{1,})[ \r\n\t]{1,}#i", "", $row[1]); $eng1 = "#ENGINE=MyISAM[ \r\n\t]{1,}DEFAULT[ \r\n\t]{1,}CHARSET=" . $cfg_db_language . "#i"; $tableStruct = preg_replace($eng1, "TYPE=MyISAM", $row[1]); fwrite($fp, '' . $tableStruct . ";\r\n\r\n"); } fclose($fp); $tmsg .= "备份数据表结构信息完成...
"; } $tmsg .= "正在进行数据备份的初始化工作,请稍后..."; $doneForm = "
\r\n
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } //执行分页备份 else { $j = 0; $fs = array(); $bakStr = ''; //分析表里的字段信息 $dsql->GetTableFields($nowtable); $intable = "INSERT INTO `$nowtable` VALUES("; while ($r = $dsql->GetFieldObject()) { $fs[$j] = trim($r->name); $j++; } $fsd = $j - 1; //读取表的内容 $dsql->SetQuery("SELECT * FROM `$nowtable` "); $dsql->Execute(); $m = 0; $bakfilename = "$bkdir/{$nowtable}_{$startpos}_" . substr(md5(time() . mt_rand(1000, 5000) . $cfg_cookie_encode), 0, 16) . ".txt"; while ($row2 = $dsql->GetArray()) { if ($m < $startpos) { $m++; continue; } //检测数据是否达到规定大小 if (strlen($bakStr) > $fsizeb) { $fp = fopen($bakfilename, "w"); fwrite($fp, $bakStr); fclose($fp); $tmsg = "完成到{$m}条记录的备份,继续备份{$nowtable}..."; $doneForm = "
\r\n
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } //正常情况 $line = $intable; for ($j = 0; $j <= $fsd; $j++) { if ($j < $fsd) { $line .= "'" . RpLine(addslashes($row2[$fs[$j]])) . "',"; } else { $line .= "'" . RpLine(addslashes($row2[$fs[$j]])) . "');\r\n"; } } $m++; $bakStr .= $line; } //如果数据比卷设置值小 if ($bakStr != '') { $fp = fopen($bakfilename, "w"); fwrite($fp, $bakStr); fclose($fp); } for ($i = 0; $i < count($tables); $i++) { if ($tables[$i] == $nowtable) { if (isset($tables[$i + 1])) { $nowtable = $tables[$i + 1]; $startpos = 0; break; } else { PutInfo("完成所有数据备份!", ""); exit(); } } } $tmsg = "完成到{$m}条记录的备份,继续备份{$nowtable}..."; $doneForm = "
\r\n
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } //分页备份代码结束 } /*------------------------- 还原数据 function __re_data(); -------------------------*/ else if ($dopost == 'redat') { if ($bakfiles == '') { ShowMsg('没指定任何要还原的文件!', 'javascript:;'); exit(); } $bakfilesTmp = $bakfiles; $bakfiles = explode(',', $bakfiles); if (empty($structfile)) { $structfile = ""; } if (empty($delfile)) { $delfile = 0; } if (empty($startgo)) { $startgo = 0; } if ($startgo == 0 && $structfile != '') { $tbdata = ''; $fp = fopen("$bkdir/$structfile", 'r'); while (!feof($fp)) { $tbdata .= fgets($fp, 1024); } fclose($fp); $querys = explode(';', $tbdata); foreach ($querys as $q) { $dsql->ExecuteNoneQuery(trim($q) . ';'); } if ($delfile == 1) { @unlink("$bkdir/$structfile"); } $tmsg = "完成数据表信息还原,准备还原数据..."; $doneForm = "
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } else { $nowfile = $bakfiles[0]; $bakfilesTmp = preg_replace("#" . $nowfile . "[,]{0,1}#", "", $bakfilesTmp); $oknum = 0; if (filesize("$bkdir/$nowfile") > 0) { $fp = fopen("$bkdir/$nowfile", 'r'); while (!feof($fp)) { $line = trim(fgets($fp, 512 * 1024)); if ($line == "") continue; $rs = $dsql->ExecuteNoneQuery($line); if ($rs) $oknum++; } fclose($fp); } if ($delfile == 1) { @unlink("$bkdir/$nowfile"); } if ($bakfilesTmp == "") { ShowMsg('成功还原所有的文件的数据!', 'javascript:;'); exit(); } $tmsg = "成功还原{$nowfile}的{$oknum}条记录

正在准备还原其它数据..."; $doneForm = "
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } } function PutInfo($msg1, $msg2) { global $cfg_soft_lang; $msginfo = "\n DedeCMS 提示信息 \n\n\n
{$msg2}"; echo $msginfo . "\n\n"; } function RpLine($str) { $str = str_replace("\r", "\\r", $str); $str = str_replace("\n", "\\n", $str); return $str; }