| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 | 
                        - <?php
 - /**
 -  * 数据库操作
 -  *
 -  * @version        $Id: sys_data_done.php 1 17:19 2010年7月20日Z tianya $
 -  * @package        DedeBIZ.Administrator
 -  * @copyright      Copyright (c) 2022, DedeBIZ.COM
 -  * @license        https://www.dedebiz.com/license
 -  * @link           https://www.dedebiz.com
 -  */
 - @ob_start();
 - @set_time_limit(0);
 - ini_set('memory_limit', '-1');
 - require_once(dirname(__FILE__).'/config.php');
 - CheckPurview('sys_Data');
 - if (empty($dopost)) $dopost = '';
 - $bkdir = DEDEDATA.'/'.$cfg_backup_dir;
 - //跳转到一下页的js
 - $gotojs = "function GotoNextPage(){document.gonext."."submit();}"."\r\nset"."Timeout('GotoNextPage()',500);";
 - $dojs = "<script>$gotojs</script>";
 - /*--------------------
 - 备份数据
 - 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 = "<form name='gonext' method='post' action='sys_data_done.php'>
 -            <input type='hidden' name='isstruct' value='$isstruct' />
 -            <input type='hidden' name='dopost' value='bak' />
 -            <input type='hidden' name='fsize' value='$fsize' />
 -            <input type='hidden' name='tablearr' value='$tablearr' />
 -            <input type='hidden' name='nowtable' value='{$tables[0]}' />
 -            <input type='hidden' name='startpos' value='0' />
 -            <input type='hidden' name='iszip' value='$iszip' />\r\n</form>\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 = "<form name='gonext' method='post' action='sys_data_done.php'>
 -                 <input type='hidden' name='isstruct' value='$isstruct' />
 -                 <input type='hidden' name='dopost' value='bak' />
 -                 <input type='hidden' name='fsize' value='$fsize' />
 -                 <input type='hidden' name='tablearr' value='$tablearr' />
 -                 <input type='hidden' name='nowtable' value='$nowtable' />
 -                 <input type='hidden' name='startpos' value='$m' />
 -                 <input type='hidden' name='iszip' value='$iszip' />\r\n</form>\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 = "<form name='gonext' method='post' action='sys_data_done.php?dopost=bak'>
 -           <input type='hidden' name='isstruct' value='$isstruct' />
 -           <input type='hidden' name='fsize' value='$fsize' />
 -           <input type='hidden' name='tablearr' value='$tablearr' />
 -           <input type='hidden' name='nowtable' value='$nowtable' />
 -           <input type='hidden' name='startpos' value='$startpos'>\r\n</form>\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 = "<form name='gonext' method='post' action='sys_data_done.php?dopost=redat'>
 -         <input type='hidden' name='startgo' value='1' />
 -         <input type='hidden' name='delfile' value='$delfile' />
 -         <input type='hidden' name='bakfiles' value='$bakfilesTmp' />
 -         </form>\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 = "<form name='gonext' method='post' action='sys_data_done.php?dopost=redat'>
 -         <input type='hidden' name='startgo' value='1' />
 -         <input type='hidden' name='delfile' value='$delfile' />
 -         <input type='hidden' name='bakfiles' value='$bakfilesTmp' />
 -         </form>\r\n{$dojs}\r\n";
 -         PutInfo($tmsg, $doneForm);
 -         exit();
 -     }
 - }
 - function PutInfo($msg1, $msg2)
 - {
 -     global $cfg_soft_lang;
 -     $msginfo = "<!DOCTYPE html><html><head><meta charset='utf-8'><meta http-equiv='X-UA-Compatible' content='IE=Edge,chrome=1'><title>提示信息</title><style>body{margin:0;line-height:1.5;font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif;color:#424b51;background:#f6f6f6}a{color:#28a745;text-decoration:none}.tips{margin:70px auto 0;padding:0;width:430px;height:auto;background:#fff;border-radius:.2rem}.tips-head{margin:0 20px;padding:16px 0;border-bottom:1px solid #f8f8f8}.tips-head p{margin:0;padding-left:10px;line-height:16px;text-align:left;border-left:3px solid #dc3545}.tips-box{padding:20px;min-height:120px;color:#424b51}.btn a{display:inline-block;margin:20px auto 0;padding:.375rem .75rem;font-size:12px;color:#fff;background:#28a745;border-radius:.2rem;text-align:center;transition:all .6s}.btn a:focus{background:#006829;border-color:#005b24;box-shadow:0 0 0 0.2rem rgba(38,159,86,.5)}@media (max-width:768px){body{padding:0 15px}.tips{width:100%}}</style></head><body><center><div class='tips'><div class='tips-head'><p>提示信息</p></div><div class='tips-box'>{$msg1}{$msg2}</div></div>";
 -     echo $msginfo."</center></body></html>";
 - }
 - function RpLine($str)
 - {
 -     $str = str_replace("\r", "\\r", $str);
 -     $str = str_replace("\n", "\\n", $str);
 -     return $str;
 - }
 
 
  |