Home > php教程 > PHP源码 > body text

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

WBOY
Release: 2016-06-08 17:21:43
Original
978 people have browsed it

下面转一站长写的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文件只保存到服务器目录,不提供下载

* 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 '恢复失败';
//}
?>

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!