/**
* @param $table
* @return array|bool|int
* 数据表备份导出
*/
function backup($table){
//打开缓冲
open_buffer();
$path = base_path().'admin/data/backup/database/';
if(!file_exists($path)){
mkdir($path,0777,true);
}
$filename = $path.date('Ymd-His').'.sql';
//备份表结构
$result = Db::query("SHOW CREATE TABLE `{$table}`");
$sql = "\n";
$sql .= "-- -----------------------------\n";
$sql .= "-- Table structure for `{$table}`\n";
$sql .= "-- -----------------------------\n";
$sql .= "DROP TABLE IF EXISTS `{$table}`;\n";
$sql .= trim($result[0]['Create Table']) . ";\n\n";
if(false === file_put_contents($filename,$sql,FILE_APPEND)){
return false;
}
//数据总数
$result = Db::query("SELECT COUNT(*) AS count FROM `{$table}`");
$count = $result['0']['count'];
//备份表数据
if($count){
//写入数据注释
$sql = "-- -----------------------------\n";
$sql .= "-- Records of `{$table}`\n";
$sql .= "-- -----------------------------\n";
file_put_contents($filename,$sql,FILE_APPEND);
//备份数据记录
//计算页面码
$ce = ceil($count/1000)-1;
$size = 1000;
for($i=0;$i<=$ce;$i++){
$limit = ($i+1-1)*$size;
$result = Db::query("SELECT * FROM `{$table}` LIMIT {$limit},$size");
$rows = count($result)-1;
$sql = "INSERT INTO `{$table}` VALUES ";
file_put_contents($filename,$sql,FILE_APPEND);
foreach ($result as $k=>$row) {
$one = '';
foreach ($row as $v){
$one .= (gettype($v) == 'string') ? "'".$v."'," : $v.",";
}
$one = rtrim($one,',');
$one = str_replace(["\n","\r"],'',$one);
if($rows == $k){
$sql .= "(" . $one . ");\n";
}else{
$sql .= "(" . $one . "),\n";
}
}
file_put_contents($filename,$sql,FILE_APPEND);
//输出缓冲
output_buffer();
}
}
return ['code'=>200,'msg'=>'完成操作'];
}
注:该示例为tp8中使用,可根据自己的实际需求进行修改
发表评论 取消回复