PHP mysql备份与恢复的类实例详解
下面转一站长写的PHP mysql备份与恢复的类实例了,这里面主要用到的是一个数据备份类与一个文件上传类了,我们结合它们两个就可以实现数据备份与文件恢复上传功能了,具体方法如下图所示。
今天推荐的精品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的下载试为保存到服务器,该类具有很强的灵活性与易用性,附上两张实际开发中的应用效果.
二、另外附加前几天写的一个文件上传类,类中有附说明
<?php /** * 类名: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.phprm.com件大小单位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; $i < $this->fCount; $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; $i < $this->fCount; $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; } } } ?>
备份类
<?php /** * 说明,该类适用于小型的网站的数据库备份,内置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 < $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; } /** *生成www.phprm.com 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 '恢复失败'; //} ?>
永久链接:http://www.phprm.com/code/63530.html
转载随意!带上文章地址吧。