// +---------------------------------------------------------------------- namespace app\controller\admin; use app\controller\Admin; use think\facade\Db; class Database extends Admin{ /** * @title 数据备份 */ public function export(){ $list = Db::query('SHOW TABLE STATUS'); $list = array_map('array_change_key_case', $list); $this->data['data'] = array( 'list' => $list ); return $this->data; } /** * @title 数据导入 */ public function import(){ //列出备份文件列表 $path = app()->getRuntimePath() . 'backup'; if (!is_dir($path)) { mkdir($path, 0755, true); } $path = realpath($path); $flag = \FilesystemIterator::KEY_AS_FILENAME; $glob = new \FilesystemIterator($path, $flag); $list = array(); foreach ($glob as $name => $file) { if (preg_match('/^\d{8,8}-\d{6,6}-\d+\.sql(?:\.gz)?$/', $name)) { $name = sscanf($name, '%4s%2s%2s-%2s%2s%2s-%d'); $date = "{$name[0]}-{$name[1]}-{$name[2]}"; $time = "{$name[3]}:{$name[4]}:{$name[5]}"; $part = $name[6]; if (isset($list["{$date} {$time}"])) { $info = $list["{$date} {$time}"]; $info['part'] = max($info['part'], $part); $info['size'] = $info['size'] + $file->getSize(); } else { $info['part'] = $part; $info['size'] = $file->getSize(); } $extension = strtoupper(pathinfo($file->getFilename(), PATHINFO_EXTENSION)); $info['compress'] = ($extension === 'SQL') ? '-' : $extension; $info['time'] = strtotime("{$date} {$time}"); $list["{$date} {$time}"] = $info; } } $this->data['data'] = array( 'list' => $list ); return $this->data; } }