$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) { $q = preg_replace("#TYPE=MyISAM#i","ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language, $q); $rs = $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 = "提示信息

提示信息

{$msg1}{$msg2}
"; echo $msginfo."
"; } function RpLine($str) { $str = str_replace("\r", "\\r", $str); $str = str_replace("\n", "\\n", $str); return $str; } ?>