SystemDatabackup.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace app\admin\controller\system;
  3. use app\admin\controller\AuthController;
  4. use service\FormBuilder as Form;
  5. use think\Request;
  6. use service\JsonService as Json;
  7. use \tp5er\Backup;
  8. /**
  9. * 文件校验控制器
  10. * Class SystemDatabackup
  11. * @package app\admin\controller\system
  12. *
  13. */
  14. class SystemDatabackup extends AuthController
  15. {
  16. protected $DB;
  17. public function _initialize()
  18. {
  19. $config = array(
  20. 'path' => '.'.PUBILC_PATH.'backup/data/',
  21. //数据库备份路径
  22. 'part' => 20971520,
  23. //数据库备份卷大小
  24. 'compress' => 1,
  25. //数据库备份文件是否启用压缩 0不压缩 1 压缩
  26. 'level' => 5,
  27. );
  28. $this->DB = new Backup($config);
  29. }
  30. /**
  31. * 数据类表列表
  32. */
  33. public function index(){
  34. return $this->fetch();
  35. }
  36. /**
  37. * 获取数据库表
  38. * @param Request|null $request
  39. */
  40. public function tablelist(Request $request = null)
  41. {
  42. $db= $this->DB;
  43. return Json::result(0,'sucess',$db->dataList(),count($db->dataList()));
  44. }
  45. /**
  46. * 查看表结构
  47. * @param Request|null $request
  48. */
  49. public function seetable(Request $request = null)
  50. {
  51. parent::__construct($request);
  52. }
  53. /**
  54. * 优化表
  55. * @param Request|null $request
  56. */
  57. public function optimize(Request $request = null)
  58. {
  59. $tables = $request->post('tables/a');
  60. $db= $this->DB;
  61. $res = $db->optimize($tables);
  62. return Json::successful($res ? '优化成功':'优化失败');
  63. }
  64. /**修复表
  65. * @param Request|null $request
  66. */
  67. public function repair(Request $request = null)
  68. {
  69. $tables = $request->post('tables/a');
  70. $db = $this->DB;
  71. $res = $db->repair($tables);
  72. return Json::successful($res ? '修复成功':'修复失败');
  73. }
  74. /**备份表
  75. * @param Request|null $request
  76. */
  77. public function backup(Request $request = null)
  78. {
  79. $tables = $request->post('tables/a');
  80. $db= $this->DB;
  81. $data = '';
  82. foreach ($tables as $t){
  83. $res = $db->backup($t,0);
  84. if($res == false && $res != 0){
  85. $data .= $t.'|';
  86. }
  87. }
  88. return Json::successful($data? '备份失败'.$data:'备份成功');
  89. }
  90. /**获取备份记录表
  91. */
  92. public function fileList()
  93. {
  94. $db = $this->DB;
  95. $files = $db->fileList();
  96. $data = [];
  97. foreach ($files as $key=>$t){
  98. $data[$key]['backtime'] = $key;
  99. $data[$key]['part'] = $t['part'];
  100. $data[$key]['size'] = $t['size'].'B';
  101. $data[$key]['compress'] = $t['compress'];
  102. $data[$key]['time'] = date('Y-m-d H:i:s',$t['time']);
  103. }
  104. return Json::result(0,'sucess',$data,count($data));
  105. }
  106. /**删除备份记录表
  107. * @param Request|null $request
  108. */
  109. public function delFile(Request $request = null)
  110. {
  111. $feilname = strtotime($request->post('feilname'));
  112. $files = $this->DB->delFile($feilname);
  113. return Json::result(0,'sucess');
  114. }
  115. /**倒入备份记录表
  116. * @param Request|null $request
  117. */
  118. public function import(Request $request = null)
  119. {
  120. $part = null; $start = null;
  121. $time = strtotime($request->post('feilname'));
  122. $db = $this->DB;
  123. if(is_numeric($time) && is_null($part) && is_null($start)){
  124. $list= $db->getFile('timeverif',$time);
  125. if(is_array($list)){
  126. session::set('backup_list',$list);
  127. $this->success('初始化完成!','',array('part' =>1,'start'=>0));
  128. }else{
  129. $this->error('备份文件可能已经损坏,请检查!');
  130. }
  131. }else if(is_numeric($part)&&is_numeric($start)){
  132. $list=session::get('backup_list');
  133. $start=$db->setFile($list)->import($start);
  134. if(false===$start){
  135. $this->error('还原数据出错!');
  136. }elseif(0===$start){
  137. if(isset($list[++$part])){
  138. $data=array('part'=>$part,'start'=>0);
  139. $this->success("正在还原...#{$part}",'',$data);
  140. }else{
  141. session::delete('backup_list');
  142. $this->success('还原完成!');
  143. }
  144. }else{
  145. $data=array('part'=>$part,'start'=>$start[0]);
  146. if($start[1]){
  147. $rate=floor(100*($start[0]/$start[1]));
  148. $this->success("正在还原...#{$part}({$rate}%)",'',$data);
  149. }else{
  150. $data['gz']=1;
  151. $this->success("正在还原...#{$part}",'',$data);
  152. }
  153. $this->success("正在还原...#{$part}",'');
  154. }
  155. }else{
  156. $this->error('参数错误!');
  157. }
  158. // return Json::result(0,'sucess',$data,count($data));
  159. }
  160. /**下载备份记录表
  161. * @param Request|null $request
  162. */
  163. public function downloadFile(Request $request = null)
  164. {
  165. $feilname = strtotime($request->post('feilname'));
  166. $this->DB->downloadFile($feilname);
  167. }
  168. }