程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php mysql數據庫備份與數據還原類

php mysql數據庫備份與數據還原類

編輯:關於PHP編程

說明,該類適用於小型的網站的數據庫備份,內置MYSQL連接,只需要簡單配置數據連接 * 及存貯備份的位置即可。 * 類實列化並且連接數據庫以後可執行以下操作

php教程 mysql教程數據庫教程備份與數據還原類
 /**
  * 說明,該類適用於小型的網站的數據庫備份,內置mysql連接,只需要簡單配置數據連接
  * 及存貯備份的位置即可。
  * 類實列化並且連接數據庫以後可執行以下操作
  * get_db_table($database)    取得所有數據表
  * export_sql($table,$subsection=0))   生成sql文件,注意生成sql文件只保存到服務器目錄,不提供下載
  * import_sql($dir)     恢復數據只導入服務器目錄下的sql文件
  * 該類制作簡單,可任意傳播,如何您對該類有什麼提議,請發送郵件給小蝦
  * @author 趙紅健[游天小蝦]
  * email:[email protected]
  * 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 < $numfields; $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<count($filearry);$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;
 }

/**
 *生成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<count($table);$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<count($table);$i++){
     $tmparry = $this->set_sql($table[$i],$subsection,$this->transfer);
     $sqlarry = array_merge($sqlarry,$tmparry);
    }
    $sqlarry[] = $this->transfer;
   }
       for($i=0;$i<count($sqlarry);$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<count($filearry);$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 '恢復失敗';
//}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved