search
HomeBackend DevelopmentPHP TutorialTwo PHP database backup program codes_PHP tutorial

Two PHP database backup program codes_PHP tutorial

Jul 13, 2016 pm 05:06 PM
phpTwo typescodeCanbackupdatabaseprogramkind

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 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 $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 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 $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 $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...
Statement
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
PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),