SystemDatabackup.php 5.5 KB

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