예제 #1
0
 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>";
예제 #2
0
 $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++) {
예제 #3
0
파일: dbbak.php 프로젝트: cranefly/crane
/**
 *备份数据库
 *@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>');
    }
}