搜索
系统检测到您的用户名不符合规范:

tp5数据库还原(备忘,继tp5备份mysql数据库)

浏览:1699 发布日期:2018年06月28日 分类:技术分享 关键字: thinkphp5 数据库还原
thinkphp版本5.0.10

1.html页面

data.html<div class="row data-list">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
备份文件
</div>
<div class="panel-body">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>文件名称</th>
<th>时间</th>
<th>大小</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{volist name='list' id='v'}
<tr class="tr-list">
<td>{$v.name}</td>
<td>{$v.time}</td>
<td>{$v.size}</td>
<td><a onClick="do_red('{$v.name}');">还原</a></td>
</tr>
{/volist}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script>
//前端layer框架
function do_red(name)
{
layer.confirm('确认要还原数据库吗',function(index){
$.post("{:url('do_red')}", {name: name}, function(data) {
layer.msg(data.msg,{icon:1,time:2000});
});
});
}
</script>
2.PHP代码//页面渲染
public function data()
{
//读取数据库备份文件(大家根据自己的实际路径修改)
$dir = ROOT_PATH.'/data/';
//SQL文件数组
$list = [];
if (is_dir($dir)) {
$fileList = scandir($dir);
foreach ($fileList as $key => $val) {
if( $val=='.' || $val=='..'){
continue;
}
//文件名称
$list[$key]['name']=$val;
//时间
$list[$key]['time'] = date('Y-m-d H:i:s',filemtime($dir.'/'.$val));
//大小
$filesize = filesize($dir.'/'.$val);
if ($filesize>0 && $filesize<=1024) {
$filesize=1;
} else {
$filesize=ceil($filesize/1024);
}
$list[$key]['size'] = $filesize.'KB';
}
if (count($list) > 0) {
$this->assign('list',$list);
} else {
echo '没有SQL文件';
}
} else {
echo '目录不存在';
}
return $this->fetch();
}

//数据库还原
public function do_red($name)
{
header("content-type:text/html;charset=utf-8");
$file = ROOT_PATH.'/data/'.$name; //还原的SQL文件
$tablepre = 'jd_'; //表前缀
if (!file_exists($file)) {
return ['status'=>-1, 'msg'=>'文件不存在'];
}
$sqldata = file_get_contents($file); //读取数据文件
$sqlFormat = $this->sql_split($sqldata, $tablepre); //获取SQl语句数组

//清空原有数据(要做好备份哦)
$info = Db::getConfig();
$dbname = $info['database']; //获取当前数据库
$tables = Db::query("show tables"); //读取所有表
foreach ($tables as $key => $value) {
$table = $value["Tables_in_$dbname"];
Db::execute("delete from $table");
}

$counts = count($sqlFormat);
$arr = [];
for ($i = $n = 0; $i < $counts; $i++) {
$sql = trim($sqlFormat[$i]);
if (strstr($sql, 'INSERT INTO')) { //读取所有的INSERT语句
$arr[] = $sql;
Db::execute($sql);
}
}
return ['status'=>1, 'msg'=>'数据已还原', 'arr'=>$arr];
}

//函数功能:将SQL语句组装成数组
function sql_split($sql, $tablepre) {
if ($tablepre != "jd_") {
$sql = str_replace("jd_", $tablepre, $sql);
}
$sql = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\1円 DEFAULT CHARSET=utf8", $sql);
$sql = str_replace("\r", "\n", $sql);
$ret = array();
$num = 0;
$queriesarray = explode(";\n", trim($sql));
unset($sql);
foreach ($queriesarray as $query) {
$ret[$num] = '';
$queries = explode("\n", trim($query));
$queries = array_filter($queries);
foreach ($queries as $query) {
$str1 = substr($query, 0, 1);
if ($str1 != '#' && $str1 != '-')
$ret[$num] .= $query;
}
$num++;
}
return $ret;
}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
考拉进阶
积分:2587 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /