0

0

PHP mysql备份与恢复的类实例详解

php中文网

php中文网

发布时间:2016-06-08 17:21:43

|

1163人浏览过

|

来源于php中文网

原创

下面转一站长写的php mysql备份与恢复的类实例了,这里面主要用到的是一个数据备份类与一个文件上传类了,我们结合它们两个就可以实现数据备份与文件恢复上传功能了,具体方法如下图所示。

<script>ec(2);</script>

今天推荐的精品PHP代码就是mysql备份与恢复的类了,在一般的PHP网站中都会有在线mysql备份与恢复,这样做的好处是不用每次备份都要使用 phpmyadmin 或者是客户端的工具了,使用时将备份恢复的类 dbback.class.php 进行实例化就可以使用了。

这里直接附上该类作者的说明了:该类适用于小型的网站的数据库备份,内置MYSQL连接,只需要简单的配置数据库连接及存贮备份的位置即可,类实例化并且连接数据库以后可执行以下操作:

 代码如下 复制代码

* get_db_table($database) 取得所有数据表

* export_sql($table,$subsection=0)) 生成sql文件,注意生成sql文件只保存到服务器目录,不提供下载

立即学习PHP免费学习笔记(深入)”;

* import_sql($dir) 恢复数据只导入服务器目录下的sql文件

包里作者文件的说明如下:

一、之前有发过一个mysql的备份类,但是只有备份功能,今天花了点时间,对该类进行重写, 1.新增读取数据库内所有表格 2.新增mysql在线恢复 3.修改了mysql的下载试为保存到服务器,该类具有很强的灵活性与易用性,附上两张实际开发中的应用效果.

二、另外附加前几天写的一个文件上传类,类中有附说明

 代码如下 复制代码

 /**
 * 类名:upfile
 * 作用:处理文件上传
 * 说明,该类处理单个或者多个文件上传,使用该类时,只需要实列化该类
 * 例:
 * $up = upfile()
 * $up->update_file($_FILE['filename'])
 *
 * $up->update_file   函数返回一个数组,如果是多文件上传,则为多维数据。
 * 数组的内容:
 * $fileInfo['file_size']   上传文件的大小
 * $fileInfo['file_suffix'] 上传文件的类型
 * $fileInfo['file_name']   上传文件的名字
 * $fileInfo['error']     上传文件产生的错误
 *
 * @author 赵红健[游天小虾]
 * email:328742379@qq.com
 * qq交流群:69574955 聚义堂-网页制作交
 */
class upfile {
 public $fCount = 1;           //上传文件的数量
 public $fType  = array('jpg','jpeg','gif','png');  //文件格式
 public $fSize  = 1024;          //文www.111cn.Net件大小单位kb
 public $fDir   = 'test/';         //文件存放目录
 public $errorMsg = '';          //产生的临时错误信息�ļ��ϴ�����Ĵ���

 /**
  *函数名:get_tmp_file($putFile)
  *作用:取得上传的临时文件名
  *@param array $putFile
  *@return string $upImg 返回临时文件名
  */
  function get_tmp_file($putFile){
  if($this->fCount == 1){
   $tmpFile = $putFile['tmp_name'];
  }else{
   for($i=0;$ifCount;$i++){
    $tmpFile[] = $putFile['tmp_name'][$i];
   }
  }
  return $tmpFile;
  }

 /**
  *函数名:get_suffix($fileName)
  *作用:取得文件的后缀名
  *@param file $fileName
  *@return string $suffixName 返回后缀名
  */
  function get_suffix($fileName){
  $link = pathinfo($fileName);
     $suffixName = strtolower($link['extension']);
     return $suffixName;
  }

 /**
  *验证文件大小
  *@author 赵红健
  *@param $fileSize
  *@return booln
  */
 function check_file_size($fileSize){
  $this->errorMsg = '';
  if($fileSize/1000 > $this->fSize){
   $this->errorMsg = '警告:文件超出大小!';
   return false;
  }else{
   return true;
  }
 }

 /**
  *验证文件类型是否合法
  *@author 赵红健
  *@param $fileSuffix
  *@return booln
  */
 function check_file_suffix($fileSuffix){
   $this->errorMsg = '';
   if(!in_array($fileSuffix,$this->fType)){
    $this->errorMsg = '警告:文件类型不在允许范围内!';
    return false;
   }else{
    return true;
   }
 }

 /**
  *移动临时文件
  *@author 赵红健
  *@param $fileSuffix
  *@return booln
  */
 function move_temp_file($tmpFile,$targetFile){
   $this->errorMsg = '';
   if(!move_uploaded_file($tmpFile,$targetFile)){
    $this->errorMsg = '警告:文件移动失败!';
    return false;
   }else{
    return true;
   }
 }


     /**
   *函数名:update_file($putFile)
   *作用:上传文件
   *@param array $putFile
   *@return array 文件信息
   */
    function update_file($putFile){
   $tmpFile = $this->get_tmp_file($putFile);
   if(!file_exists($this->fDir)){
       $this->errorMsg[] = '错误:目录'.$this->fDir.'不存在';
    return $this->errorMsg;
   }
   $this->fDir = substr($this->fDir,strlen($this->fDir)-1,1)=='/'?$this->fDir:$this->fDir.'/';
   if(!is_array($putFile['size'])){
    $fileInfo['file_size'] = $putFile['size'];
    if(!$this->check_file_size($fileInfo['file_size'])){
     $fileInfo['error'] = $this->errorMsg;
     return $fileInfo;
    }
    $fileInfo['file_suffix'] = $this->get_suffix($putFile['name']);
    if(!$this->check_file_suffix($fileInfo['file_suffix'])){
     $fileInfo['error'] = $this->errorMsg;
     return $fileInfo;
    }

    $fileInfo['file_name']   = date('ymdhms').'.'.$fileInfo['file_suffix'];
    if(!$this->move_temp_file($tmpFile,$this->fDir.$fileInfo['file_name'])){
     $fileInfo['error'] = $this->errorMsg;
     return $fileInfo;
    }
    return $fileInfo;

   }else{
    for($i=0;$ifCount;$i++){
     $fileInfo[$i]['file_size'] = $putFile['size'][$i];
     if(!$this->check_file_size($fileInfo[$i]['file_size'])){
      $fileInfo[$i]['error'] = $this->errorMsg;
      continue;
     }

     $fileInfo[$i]['file_suffix'] = $this->get_suffix($putFile['name'][$i]);
     if(!$this->check_file_suffix($fileInfo[$i]['file_suffix'])){
      $fileInfo[$i]['error'] = $this->errorMsg;
      continue;
     }

     $fileInfo[$i]['file_name']  = date('ymdhms').rand().'.'.$fileInfo[$i]['file_suffix'];
     if(!$this->move_temp_file($tmpFile[$i],$this->fDir.$fileInfo[$i]['file_name'])){
      $fileInfo[$i]['error'] = $this->errorMsg;
      continue;
     }
     }
    return $fileInfo;
   }
    }
}

?>

备份类

 代码如下 复制代码

   /**
  * 说明,该类适用于小型的网站的数据库备份,内置MYSQL连接,只需要简单配置数据连接
  * 及存贮备份的位置即可。
  * 类实列化并且连接数据库以后可执行以下操作
  * get_db_table($database)    取得所有数据表
  * export_sql($table,$subsection=0))   生成sql文件,注意生成sql文件只保存到服务器目录,不提供下载
  * import_sql($dir)     恢复数据只导入服务器目录下的sql文件
  * 该类制作简单,可任意传播,如何您对该类有什么提议,请发送邮件给小虾
  * @author 赵红健[游天小虾]
  * email:328742379@qq.com
  * qq交流群:69574955 聚义堂-网页制作交
  */

class data {
 public   $data_dir    = "class/"; //备份文件存放的路径
 public   $transfer     ="";   //临时存放sql[切勿不要对该属性赋值,否则会生成错误的sql语句]

/**
 *数据库连接
 *@param string $host 数据库主机名
 *@param string $user 用户名
 *@param string $pwd  密码
 *@param string $db   选择数据库名
 *@param string $charset 编码方式
 */
 function connect_db($host,$user,$pwd,$db,$charset='gbk'){
  if(!$conn = mysql_connect($host,$user,$pwd)){
   return false;
  }
  mysql_select_db($db);
  mysql_query("set names $charset");
  return true;
 }

/**
 * 生成sql语句
 * @param   $table     要备份的表
 * @return  $tabledump 生成的sql语句
 */
 public function set_sql($table,$subsection=0,&$tableDom=''){
  $tableDom .= "DROP TABLE IF EXISTS $tablen";
  $createtable = mysql_query("SHOW CREATE TABLE $table");
  $create = mysql_fetch_row($createtable);
  $create[1] = str_replace("n","",$create[1]);
  $create[1] = str_replace("t","",$create[1]);

  $tableDom  .= $create[1].";n";

  $rows = mysql_query("SELECT * FROM $table");
  $numfields = mysql_num_fields($rows);
  $numrows = mysql_num_rows($rows);
  $n = 1;
  $sqlArry = array();
  while ($row = mysql_fetch_row($rows)){
     $comma = "";
     $tableDom  .= "INSERT INTO $table VALUES(";
     for($i = 0; $i      {
    $tableDom  .= $comma."'".mysql_escape_string($row[$i])."'";
    $comma = ",";
     }
    $tableDom  .= ")n";
     if($subsection != 0 && strlen($this->transfer )>=$subsection*1000){
       $sqlArry[$n]= $tableDom;
       $tableDom = ''; $n++;
     }
  }
  return $sqlArry;
   }

/**
 *列表数据库中的表
 *@param  database $database 要操作的数据库名
 *@return array    $dbArray  所列表的数据库表
 */
 public function get_db_table($database){
  $result = mysql_list_tables($database);
  while($tmpArry = mysql_fetch_row($result)){
   $dbArry[]  = $tmpArry[0];
  }
  return $dbArry;
 }

/**
 *验证目录是否有效
 *@param diretory $dir
 *@return booln
 */
 function check_write_dir($dir){
  if(!is_dir($dir)) {@mkdir($dir, 0777);}
  if(is_dir($dir)){
   if($link = opendir($dir)){
    $fileArry = scandir($dir);
    for($i=0;$i      if($fileArry[$i]!='.' || $fileArry != '..'){
      @unlink($dir.$fileArry[$i]);
     }
    }
   }
  }
  return true;
 }
/**
 *将数据写入到文件中
 *@param file $fileName 文件名
 *@param string $str   要写入的信息
 *@return booln 写入成功则返回true,否则false
 */
 private function write_sql($fileName,$str){
  $re= true;
  if(!@$fp=fopen($fileName,"w+")) {$re=false; echo "在打开文件时遇到错误,备份失败!";}
  if(!@fwrite($fp,$str)) {$re=false; echo "在写入信息时遇到错误,备份失败!";}
  if(!@fclose($fp)) {$re=false; echo "在关闭文件 时遇到错误,备份失败!";}
  return $re;
 }

/**
 *生成www.111cn.net sql文件
 *@param string $sql sql    语句
 *@param number $subsection 分卷大小,以KB为单位,为0表示不分卷
 */
     public function export_sql($table,$subsection=0){
      if(!$this->check_write_dir($this->data_dir)){echo '您没有权限操作目录,备份失败';return false;}
      if($subsection == 0){
       if(!is_array($table)){
    $this->set_sql($table,0,$this->transfer);
   }else{
    for($i=0;$i      $this->set_sql($table[$i],0,$this->transfer);
    }
   }
       $fileName = $this->data_dir.date("Ymd",time()).'_all.sql';
       if(!$this->write_sql($fileName,$this->transfer)){return false;}
      }else{
       if(!is_array($table)){
    $sqlArry = $this->set_sql($table,$subsection,$this->transfer);
    $sqlArry[] = $this->transfer;
   }else{
    $sqlArry = array();
    for($i=0;$i      $tmpArry = $this->set_sql($table[$i],$subsection,$this->transfer);
     $sqlArry = array_merge($sqlArry,$tmpArry);
    }
    $sqlArry[] = $this->transfer;
   }
       for($i=0;$i         $fileName = $this->data_dir.date("Ymd",time()).'_part'.$i.'.sql';
        if(!$this->write_sql($fileName,$sqlArry[$i])){return false;}
       }
      }
      return true;
    }
/**
 *载入sql文件
 *@param diretory $dir
 *@return booln
 *注意:请不在目录下面存放其它文件,或者目录
 *以节省恢复时间
 */
    public function import_sql($dir){
  if($link = opendir($dir)){
   $fileArry = scandir($dir);
    $pattern = "_part[0-9]+.sql$|_all.sql$";
   for($i=0;$i     if(eregi($pattern,$fileArry[$i])){
     $sqls=file($dir.$fileArry[$i]);
     foreach($sqls as $sql){
      str_replace("r","",$sql);
      str_replace("n","",$sql);
      if(!mysql_query(trim($sql))) return false;
     }
    }
   }
   return true;
  }
    }

}

//$d = new data();

//连接数据库
//if(!$d->connect_db('localhost','root','','guestbook','gbk')){
// echo '数据库连接失败';
//}

//查找数据库内所有数据表
//$tableArry = $d->get_db_table('guestbook');

//备份并生成sql文件
//if(!$d->export_sql($tableArry)){
// echo '备份失败';
//}else{
// echo '备份成功';
//}

//恢复导入sql文件夹
//if($d->import_sql($d->data_dir)){
// echo '恢复成功';
//}else{
// echo '恢复失败';
//}
?>

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 17.8万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.1万人学习

C# 教程
C# 教程

共94课时 | 9.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号