/**
  * 备份数据库
  * @param  String  $tables 表名
  * @param  Integer $id     表ID
  * @param  Integer $start  起始行数
  * @author 麦当苗儿 <*****@*****.**>
  */
 public function export($tables = null, $id = null, $start = null)
 {
     if (IS_POST && !empty($tables) && is_array($tables)) {
         //初始化
         //读取备份配置
         $config = array('path' => realpath(C('DATA_BACKUP_PATH')) . DIRECTORY_SEPARATOR, 'part' => C('DATA_BACKUP_PART_SIZE'), 'compress' => C('DATA_BACKUP_COMPRESS'), 'level' => C('DATA_BACKUP_COMPRESS_LEVEL'));
         //检查是否有正在执行的任务
         $lock = "{$config['path']}backup.lock";
         if (is_file($lock)) {
             $this->error(L('_DETECTED_THAT_THERE_IS_A_BACKUP_TASK_BEING_PERFORMED_'));
         } else {
             //创建锁文件
             file_put_contents($lock, NOW_TIME);
         }
         //检查备份目录是否可写
         is_writeable($config['path']) || $this->error(L('_BACKUP_DIRECTORY_IS_NOT_AVAILABLE_OR_NOT_TO_BE_WRITTEN_'));
         session('backup_config', $config);
         //生成备份文件信息
         $file = array('name' => date('Ymd-His', NOW_TIME), 'part' => 1);
         session('backup_file', $file);
         //缓存要备份的表
         session('backup_tables', $tables);
         //创建备份文件
         $Database = new Database($file, $config);
         if (false !== $Database->create()) {
             $tab = array('id' => 0, 'start' => 0);
             $this->success(L('_INITIAL_SUCCESS_'), '', array('tables' => $tables, 'tab' => $tab));
         } else {
             $this->error(L('_INITIALIZATION_FAILED_'));
         }
     } elseif (IS_GET && is_numeric($id) && is_numeric($start)) {
         //备份数据
         $tables = session('backup_tables');
         //备份指定表
         $Database = new Database(session('backup_file'), session('backup_config'));
         $start = $Database->backup($tables[$id], $start);
         if (false === $start) {
             //出错
             $this->error(L('_BACKUP_ERROR_'));
         } elseif (0 === $start) {
             //下一表
             if (isset($tables[++$id])) {
                 $tab = array('id' => $id, 'start' => 0);
                 $this->success(L('_BACKUP_COMPLETE_'), '', array('tab' => $tab));
             } else {
                 //备份完成,清空缓存
                 unlink(session('backup_config.path') . 'backup.lock');
                 session('backup_tables', null);
                 session('backup_file', null);
                 session('backup_config', null);
                 $this->success(L('_BACKUP_COMPLETE_'));
             }
         } else {
             $tab = array('id' => $id, 'start' => $start[0]);
             $rate = floor(100 * ($start[0] / $start[1]));
             $this->success(L('_BACKUP_ING_') . "...({$rate}%)", '', array('tab' => $tab));
         }
     } else {
         //出错
         $this->error(L('_PARAMETER_ERROR_'));
     }
 }
 /**
  * 备份数据库
  * @param  String  $tables 表名
  * @param  Integer $id     表ID
  * @param  Integer $start  起始行数
  * @author Rocks
  */
 public function export($tables = null, $id = null, $start = null)
 {
     if (IS_POST && !empty($tables) && is_array($tables)) {
         //初始化
         //读取备份配置
         $config = array('path' => realpath(C('DATA_BACKUP_PATH')) . DIRECTORY_SEPARATOR, 'part' => C('DATA_BACKUP_PART_SIZE'), 'compress' => C('DATA_BACKUP_COMPRESS'), 'level' => C('DATA_BACKUP_COMPRESS_LEVEL'));
         //检查是否有正在执行的任务
         $lock = "{$config['path']}backup.lock";
         if (is_file($lock)) {
             $this->error('检测到有一个备份任务正在执行,请稍后再试!');
         } else {
             //创建锁文件
             file_put_contents($lock, NOW_TIME);
         }
         //检查备份目录是否可写
         is_writeable($config['path']) || $this->error('备份目录不存在或不可写,请检查后重试!');
         session('backup_config', $config);
         //生成备份文件信息
         $file = array('name' => date('Ymd-His', NOW_TIME), 'part' => 1);
         session('backup_file', $file);
         //缓存要备份的表
         session('backup_tables', $tables);
         //创建备份文件
         $Database = new Database($file, $config);
         if (false !== $Database->create()) {
             $tab = array('id' => 0, 'start' => 0);
             $this->success('初始化成功!', '', array('tables' => $tables, 'tab' => $tab));
         } else {
             $this->error('初始化失败,备份文件创建失败!');
         }
     } elseif (IS_GET && is_numeric($id) && is_numeric($start)) {
         //备份数据
         $tables = session('backup_tables');
         //备份指定表
         $Database = new Database(session('backup_file'), session('backup_config'));
         $start = $Database->backup($tables[$id], $start);
         if (false === $start) {
             //出错
             $this->error('备份出错!');
         } elseif (0 === $start) {
             //下一表
             if (isset($tables[++$id])) {
                 $tab = array('id' => $id, 'start' => 0);
                 $this->success('备份完成!', '', array('tab' => $tab));
             } else {
                 //备份完成,清空缓存
                 unlink(session('backup_config.path') . 'backup.lock');
                 session('backup_tables', null);
                 session('backup_file', null);
                 session('backup_config', null);
                 $this->success('备份完成!');
             }
         } else {
             $tab = array('id' => $id, 'start' => $start[0]);
             $rate = floor(100 * ($start[0] / $start[1]));
             $this->success("正在备份...({$rate}%)", '', array('tab' => $tab));
         }
     } else {
         //出错
         $this->error('参数错误!');
     }
 }
Пример #3
0
 /**
  * 备份数据库
  * @param  String  $tables 表名
  * @param  Integer $id     表ID
  * @param  Integer $start  起始行数
  * @author 枫叶 <*****@*****.**>
  */
 public function export($tables = null, $id = null, $start = null)
 {
     if (IS_POST && !empty($tables) && is_array($tables)) {
         //初始化
         //读取备份配置
         $config = array('path' => realpath(C('DATA_BACKUP_PATH')) . DIRECTORY_SEPARATOR, 'part' => C('DATA_BACKUP_PART_SIZE'), 'compress' => C('DATA_BACKUP_COMPRESS'), 'level' => C('DATA_BACKUP_COMPRESS_LEVEL'));
         //检查是否有正在执行的任务
         $lock = "{$config['path']}backup.lock";
         //die(realpath(C('DATA_BACKUP_PATH')));
         if (is_file($lock)) {
             $this->error('检测到有一个备份任务正在执行,请稍后再试!');
         } else {
             //创建锁文件
             file_put_contents($lock, NOW_TIME);
         }
         //检查备份目录是否可写
         is_writeable($config['path']) || $this->error('备份目录不存在或不可写,请检查后重试!');
         session('backup_config', $config);
         //生成备份文件信息
         $file = array('name' => date('Ymd-His', NOW_TIME), 'part' => 1);
         session('backup_file', $file);
         //缓存要备份的表
         session('backup_tables', $tables);
         //创建备份文件
         $Database = new Database($file, $config);
         if (false !== $Database->create()) {
             $tab = array('id' => 0, 'start' => 0);
             $this->success('初始化成功!', '', array('tables' => $tables, 'tab' => $tab));
         } else {
             $this->error('初始化失败,备份文件创建失败!');
         }
     } elseif (IS_GET && is_numeric($id) && is_numeric($start)) {
         //备份数据
         $tables = session('backup_tables');
         //备份指定表
         $Database = new Database(session('backup_file'), session('backup_config'));
         $start = $Database->backup($tables[$id], $start);
         if (false === $start) {
             //出错
             $this->error('备份出错!');
         } elseif (0 === $start) {
             //下一表
             if (isset($tables[++$id])) {
                 $tab = array('id' => $id, 'start' => 0);
                 $this->success('<span style="color:#00C700;">备份完成!</span>', '', array('tab' => $tab));
             } else {
                 //备份完成,清空缓存
                 unlink(session('backup_config.path') . 'backup.lock');
                 session('backup_tables', null);
                 session('backup_file', null);
                 session('backup_config', null);
                 //发送邮件附件到邮箱
                 //			$result=send_mail(array(
                 //				'to'=>'*****@*****.**',
                 //				'subject'=>"您的网站{$webzipname}已经打包完成",//主题标题
                 //				'fromname'=>C('ADMIN_TITLE').'网站打包成功'.date('Y/m/d H:i:s'),//发件人
                 //				'body'=>"您的网站{$webzipname}已经打包完成,下载地址为http://frame.loc".str_replace('./','/',$webzipname)//邮件内容
                 //				//'attachment'=>str_replace('/','\\',$_SERVER['DOCUMENT_ROOT'].str_replace('./','/',$webzipname))
                 //
                 //			));
                 $this->success('<span style="color:#00C700;">备份完成!</span>');
             }
         } else {
             $tab = array('id' => $id, 'start' => $start[0]);
             $rate = floor(100 * ($start[0] / $start[1]));
             $this->success("正在备份...({$rate}%)", '', array('tab' => $tab));
         }
     } else {
         //出错
         $this->error('参数错误!');
     }
 }