Home > Backend Development > PHP Tutorial > Two PHP database backup program codes_PHP tutorial

Two PHP database backup program codes_PHP tutorial

WBOY
Release: 2016-07-13 17:06:12
Original
1220 people have browsed it

Xiaosheng collected two PHP database backup programs today. The functions that can be completed here are: 1. Back up the specified data table, 2. Package into a zip file, 3. Send to the specified email address, that’s all the basic functions

See how to use it below:

The code is as follows Copy code
 代码如下 复制代码

error_reporting(0);//消灭万恶的php报警提示
//设定邮箱
$options = array('email' => array('email1', 'email2'),
'folder' => './backup/',
'mysql' => array('localhost', 'user', 'password', 'db'));
 
$b = new Backup($options);
 
  // 提交备份命令
  if(isset($_POST['backup']))
  {
   // 开始备份
   $b->backupDB();
  }
  // 显示备份表
  $b->outputForm();
?>

error_reporting(0);//Eliminate all evil php alarm prompts
//Set email
$options = array('email' => array('email1', 'email2'),
'folder' => './backup/',
'mysql' => array('localhost', 'user', 'password', 'db'));

$b = new Backup($options);

// Submit backup command
if(isset($_POST['backup']))
{
// Start backup
$b->backupDB();
}
// Display backup table
$b->outputForm();
?>

Concrete class implementation:

The code is as follows Copy code


class Backup
{
/**
* @var is used to save configuration parameters
*/
var $config;

/**
* @var used to save mysql dump data
*/
var $dump;

/**
* @var is used for database result data and insert instructions
*/
var $struktur = array();

/**
* @var compressed file name zip
*/
var $datei;

/**
* Structural function
* Connect to database
* @return
*/
public function Backup($options)
{
//Read configuration from formal parameters
foreach($options AS $name => $value)
{
$this->config[$name] = $value;
}

// Connect to database
mysql_connect($this->config['mysql'][0], $this->config['mysql'][1],
$this->config['mysql'][2]) or die(mysql_error());
mysql_select_db($this->config['mysql'][3]) or die(mysql_error());
}

/**
* Function to execute backup database process
* @return
*/
public function backupDB()
{
//Command to start backup
if(isset($_POST['backup']))
{
// Check whether the data table is selected
if(empty($_POST['table']))
{
die("Please select a data table.");
}

/**Start backup **/
$tables = array();
$insert = array();
$sql_statement = '';

// Lock the database that needs to be backed up to prevent dirty data from being read
foreach($_POST['table'] AS $table)
{
mysql_query("LOCK TABLE $table WRITE");

// Get the database structure
$res = mysql_query('SHOW CREATE TABLE '.$table.'');
$createtable = mysql_result($res, 0, 1);
$str = "nn".$createtable."nn";

array_push($tables, $str);

// Query all data rows in the data table
$sql = 'SELECT * FROM '.$table;
$query = mysql_query($sql) or die(mysql_error());
$feld_anzahl = mysql_num_fields($query);

$sql_statement = '--
-- Data Table `$table`
--
';

// Start reading data and convert it into insert command
while($ds = mysql_fetch_object($query)){
$sql_statement .= 'INSERT INTO `'.$table.'` (';

for ($i = 0;$i <$feld_anzahl;$i++){
if ($i ==$feld_anzahl-1){
$sql_statement .= mysql_field_name($query,$i);
} else {
$sql_statement .= mysql_field_name($query,$i).', ';
}
}

$sql_statement .= ') VALUES (';

for ($i = 0;$i <$feld_anzahl;$i++){
$name = mysql_field_name($query,$i);
if (empty($ds->$name)){
$ds->$name = 'NULL';
}
if ($i ==$feld_anzahl-1){
$sql_statement .= '"'.$ds->$name.'"';
} else {
$sql_statement .= '"'.$ds->$name.'", ';
}
}
$sql_statement .= ");n";
}

//Put the insert data in the array and remove duplicates
if(!in_array($sql_statement, $insert))
{
array_push($insert, $sql_statement);
unset($sql_statement);
}

unset($sql_statement);

}

// Put the database structure and insert command together
$this->struktur = array_combine($tables, $insert);

//Execute dump function
$this->createDUMP($this->struktur);

// Generate zip archive
$this->createZIP();

/**End of backup **/

//Send an email to the specified email address. The attachment contains the sql backup, if you have set it up^_^
if(isset($this->config['email']) && !empty($this->config['email']))
{
$this->sendEmail();
}

// output
echo '

Backup completed

Download Backup



';
}
}

/**
* Send email function
* @return
*/
protected function sendEmail()
{
// Read email address
foreach($this->config['email'] AS $email)
{
$to = $email;

$from = $this->config['email'][0];

$message_body = "The zip package contained in this email is a database backup";

$msep = strtoupper (md5 (uniqid (time ())));

// Set email header
$header =
"From: $fromrn" .
"MIME-Version: 1.0rn" .
"Content-Type: multipart/mixed; boundary=".$msep."rnrn" .
"--$mseprn" .
"Content-Type: text/plainrn" .
"Content-Transfer-Encoding: 8bitrnrn" .
$message_body . "rn";

// File name
$dateiname = $this->datei;

// Compressed package size
$dateigroesse = filesize ($dateiname);

// Read the compressed package
$f = fopen ($dateiname, "r");
// Save to attachment
$attached_file = fread ($f, $dateigroesse);
// Close the compressed package
fclose ($f);
//Create an attachment
$attachment = chunk_split (base64_encode ($attached_file));

// Set attachment header
$header .=
"--" . $msep . "rn" .
"Content-Type: application/zip; name='Backup'rn" .
"Content-Transfer-Encoding: base64rn" .
"Content-Disposition: attachment; filename='Backup.zip'rn" .
"Content-Description: Mysql Datenbank Backup im Anhangrnrn" .
$attachment . "rn";

// Mark attachment end unknown
$header .= "--$msep--";

// Email title
$subject = "Database Backup";

//Sending emails requires enabling PHP support^^
if(mail($to, $subject, '', $header) == FALSE)
{
die("Unable to send email, please check your email address");
}

echo "

Email sent successfully

";
}
}

/**
* Create a compressed package of database backup and save it to the specified directory on the server
* @return
*/
protected function createZIP()
{

// Folder permissions must be sufficient
chmod($this->config['folder'], 0777);

// Create compressed package
$zip = new ZipArchive();
//Set the compressed package file name
$this->datei = $this->config['folder'].$this->config['mysql'][3]."_"
.date("j_F_Y_g_i_a").".zip";

// See if the compressed package can be opened
if ($zip->open($this->datei, ZIPARCHIVE::CREATE)!==TRUE) {
exit("Cannot open <".$this->datei.">n");
}

//Put the dumped data into the compressed package
$zip->addFromString("dump.sql", $this->dump);
// Close the compressed package
$zip->close();

// Check to see if the compressed package has been generated
if(!file_exists($this->datei))
{
die("Unable to generate compressed package");
}

echo "

Database backup compressed package successfully generated

";
}

/**
* mysql dump函数
* @param object $dump
* @return
*/
protected function createDUMP($dump)
{
$date = date("F j, Y, g:i a");

$header = <<
                -- SQL Dump
--
-- Host: {$_SERVER['HTTP_HOST']}
-- Erstellungszeit: {$date}

--
-- Datenbank: `{$this->config['mysql'][3]}`
--

-------------------------------------------------- --------

HEADER;
foreach($dump AS $name => $value)
{
$sql .= $name.$value;
}
$this->dump = $header.$sql;
}

/**
* Generate interface function for selecting data table
* @return
*/
public function outputForm()
{
// Select all
$result = mysql_list_tables($this->config['mysql'][3]);

$buffer = '

Select the data table to be backed up







';

echo $buffer;
}
}

?>

General database backup class

The code is as follows
 代码如下 复制代码

/*数据库备份:NOTICE:此类要添加数据库连接才能正常工作*/
Class Back_up_databaseextendsdbstuff{
//类开始
var $HOST;
var $USERNAME;
var $PASSWORD;
var $DATABASE;
function Back_up_database($host,$username,$password,$database){
//初始化数据库连接
$this->HOST=$host;
$this->USERNAME=$username;
$this->ASSWORD=$password;
$this->DATABASE=$database;
$Connection=$this->connect($this->HOST,$this->USERNAME,$this->ASSWORD,$this->DATABASE,$pconnect);
$this->Connection=$Connection;
}
//取得数据库中的表
function get_table_name($database){
$this->Connection;
$result=mysql_list_tables($database);
$i=0;
while($i $tb_name[$i]=mysql_tablename($result,$i);
$table_name.=$tb_name[$i].",";
$i++;
}
$this->table_name=substr($table_name,0,-1);
return$this->table_name;
}
//取得每个表中的FIELDS和属性并生成CREATETABLE语句
function get_table_fields($table_name){
$this->Connection;
$createtable=dbstuff::query("SHOWCREATETABLE$table_name");
$create=dbstuff::fetch_row($createtable);
$tabledump.="DROPTABLEIFEXISTS$table_name;n";
$tabledump.=$create[1].";nn";
$this->$table_name=$tabledump;
return$this->$table_name;
}
//取得表中的数据并生成ISERTINTO语句
function get_insert($table_insert_name){
$this->Connection;
$rows=dbstuff::query("SELECT*FROM$table_insert_name");
$numfields=dbstuff::num_fields($rows);
$numrows=dbstuff::num_rows($rows);
while($row=dbstuff::fetch_row($rows)){
$comma="";
$tabledump.="INSERTINTO$table_insert_nameVALUES(";
for($i=0;$i<$numfields;$i++){
$tabledump.=$comma."'".mysql_escape_string($row[$i])."'";
$comma=",";
}
$tabledump.=");n";
}
$this->tabledump=$tabledump;
return$this->tabledump;
}
//获取所有数据并连接成新的字符串并将它写入文件中.sql
function get_string($database_name,$file_path_name){
$time=date("Y-m-dH:j");
$date_time=date("YmdHis");
$file_path_name=$file_path_name.$date_time.".sql";
$version="Antsent_Web_StudioDatabaseBackUpV1.01";
$idstring='#Identify:'.base64_encode("$time,$version")."n";
$head_info="$idstring".
"#n".
"#Antsnet_Web!TheBasicClassOfBackUpDataBasen".
"#Version:AntsnetWeb!$versionn".
"#Timetimen".
"#Type:ClassOfBackUpDataBasen".
"#Antsnet_Web_Studio!Home:http://www.bKjia.c0m n".
"#PleasevisitourwebsitefornewestinfomationaboutAntsnet_Web_Studio!n".
"#--------------------------------------------------------nnn";
$table_name=$this->get_table_name($database_name);
$array_table=explode(",",$table_name);
for($i=0;$i $table_string.=$this->get_table_fields($array_table[$i]);
$table_insert.=$this->get_insert($array_table[$i]);
}
$count_string=$head_info.$table_string.$table_insert;
//return$count_string;
$write_status=$this->write_file($file_path_name,$count_string);
return$write_status;
}
//写入一个文件
function write_file($file_path,$file_contents){
if(@!$fp=fopen($file_path,'w')){
$status="ThisFileCouldNotOpenOrRead.";
}else{
flock($fp,3);
fwrite($fp,$file_contents);
fclose($fp);
window.google_render_ad();
?>

Copy code
/*Database backup: NOTICE: This type needs to add a database connection to work properly*/<🎜> Class Back_up_databaseextendsdbstuff{<🎜> //Class start<🎜> var $HOST;<🎜> var $USERNAME;<🎜> var $PASSWORD;<🎜> var $DATABASE;<🎜> function Back_up_database($host,$username,$password,$database){<🎜> //Initialize database connection<🎜> $this->HOST=$host; $this->USERNAME=$username; $this->ASSWORD=$password; $this->DATABASE=$database; $Connection=$this->connect($this->HOST,$this->USERNAME,$this->ASSWORD,$this->DATABASE,$pconnect); $this->Connection=$Connection; } //Get the table in the database function get_table_name($database){ $this->Connection; $result=mysql_list_tables($database); $i=0; while($i $tb_name[$i]=mysql_tablename($result,$i);<🎜> $table_name.=$tb_name[$i].",";<🎜> $i++;<🎜> }<🎜> $this->table_name=substr($table_name,0,-1); return$this->table_name; } //Get the FIELDS and attributes in each table and generate a CREATETABLE statement function get_table_fields($table_name){ $this->Connection; $createtable=dbstuff::query("SHOWCREATETABLE$table_name"); $create=dbstuff::fetch_row($createtable); $tabledump.="DROPTABLEIFEXISTS$table_name;n"; $tabledump.=$create[1].";nn"; $this->$table_name=$tabledump; return$this->$table_name; } //Get the data in the table and generate the ISERTINTO statement function get_insert($table_insert_name){ $this->Connection; $rows=dbstuff::query("SELECT*FROM$table_insert_name"); $numfields=dbstuff::num_fields($rows); $numrows=dbstuff::num_rows($rows); while($row=dbstuff::fetch_row($rows)){ $comma=""; $tabledump.="INSERTINTO$table_insert_nameVALUES("; for($i=0;$i<$numfields;$i++){<🎜> $tabledump.=$comma."'".mysql_escape_string($row[$i])."'";<🎜> $comma=",";<🎜> }<🎜> $tabledump.=");n";<🎜> }<🎜> $this->tabledump=$tabledump; return$this->tabledump; } //Get all the data and concatenate it into a new string and write it to the file.sql function get_string($database_name,$file_path_name){ $time=date("Y-m-dH:j"); $date_time=date("YmdHis"); $file_path_name=$file_path_name.$date_time.".sql"; $version="Antsent_Web_StudioDatabaseBackUpV1.01"; $idstring='#Identify:'.base64_encode("$time,$version")."n"; $head_info="$idstring". "#n". "#Antsnet_Web!TheBasicClassOfBackUpDataBasen". "#Version:AntsnetWeb!$versionn". "#Timetimen". "#Type:ClassOfBackUpDataBasen". "#Antsnet_Web_Studio!Home:http://www.bKjia.c0m n". "#PleasevisitourwebsitefornewestinfomationaboutAntsnet_Web_Studio!n". "#------------------------------------------------ --------nnn"; $table_name=$this->get_table_name($database_name); $array_table=explode(",",$table_name); for($i=0;$i $table_string.=$this->get_table_fields($array_table[$i]); $table_insert.=$this->get_insert($array_table[$i]); } $count_string=$head_info.$table_string.$table_insert; //return$count_string; $write_status=$this->write_file($file_path_name,$count_string); return$write_status; } //Write a file function write_file($file_path,$file_contents){ if(@!$fp=fopen($file_path,'w')){ $status="ThisFileCouldNotOpenOrRead."; }else{ flock($fp,3); fwrite($fp,$file_contents); fclose($fp); window.google_render_ad(); ?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/630701.htmlTechArticleXiaosheng collected two PHP database backup programs today. The functions that can be completed here are: 1. Back up the specified data table , 2. Package into a zip file, 3. Send to the specified email address, the basic function is this...
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 Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template