php备份指定表,php备份整个MySQL数据库,或者指定表

php类实现完整备份数据库,或者备份数据库中指定表的功能:

class Backup

{

/**

* @var stores the options

*/

var $config;

/**

* @var stores the final sql dump

*/

var $dump;

/**

* @var stores the table structure + inserts for every table

*/

var $struktur = array();

/**

* @var zip file name

*/

var $datei;

/**

* this function is the constructor and phrase the options

* and connect to the database

* @return

*/

public function Backup($options)

{

// write options

foreach($options AS $name => $value)

{

$this->config[$name] = $value;

}

// check mysql connection

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());

}

/**

* this function start the backup progress its the core function

* @return

*/

public function backupDB()

{

// start backup

if(isset($_POST['backup']))

{

// check if tables are selected

if(empty($_POST['table']))

{

die("Please select a table.");

}

/** start backup **/

$tables = array();

$insert = array();

$sql_statement = '';

// lock tables

foreach($_POST['table'] AS $table)

{

mysql_query("LOCK TABLE $table WRITE");

// Read table structure

$res = mysql_query('SHOW CREATE TABLE '.$table.'');

$createtable = mysql_result($res, 0, 1);

$str = "\n\n".$createtable."\n\n";

array_push($tables, $str);

// Read table "inserts"

$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 progress

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";

}

// insert "Inserts" into an array if not exists

if(!in_array($sql_statement, $insert))

{

array_push($insert, $sql_statement);

unset($sql_statement);

}

unset($sql_statement);

}

// put table structure and inserts together in one var

$this->struktur = array_combine($tables, $insert);

// create full dump

$this->createDUMP($this->struktur);

// create zip file

$this->createZIP();

/** end backup **/

// send an email with the sql dump

if(isset($this->config['email']) && !empty($this->config['email']))

{

$this->sendEmail();

}

// output

echo '

Backup war erfolgreich

Download Backup


';

}

}

/**

* this function generate an email with attachment

* @return

*/

protected function sendEmail()

{

// start sending emails

foreach($this->config['email'] AS $email)

{

$to = $email;

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

$message_body = "This email contains the database backup as a zip file.";

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

// set email header (only text)

$header =

"From: $from\r\n" .

"MIME-Version: 1.0\r\n" .

"Content-Type: multipart/mixed; boundary="$msep"\r\n\r\n" .

"--$msep\r\n" .

"Content-Type: text/plain\r\n" .

"Content-Transfer-Encoding: 8bit\r\n\r\n" .

$message_body . "\r\n";

// file name

$dateiname = $this->datei;

// get filesize of zip file

$dateigroesse = filesize ($dateiname);

// open file to read

$f = fopen ($dateiname, "r");

// save content

$attached_file = fread ($f, $dateigroesse);

// close file

fclose ($f);

// create attachment

$attachment = chunk_split (base64_encode ($attached_file));

// set attachment header

$header .=

"--" . $msep . "\r\n" .

"Content-Type: application/zip; name='Backup'\r\n" .

"Content-Transfer-Encoding: base64\r\n" .

"Content-Disposition: attachment; filename='Backup.zip'\r\n" .

"Content-Description: Mysql Datenbank Backup im Anhang\r\n\r\n" .

$attachment . "\r\n";

// mark end of attachment

$header .= "--$msep--";

// eMail Subject

$subject = "Database Backup";

// send email to emails^^

if(mail($to, $subject, '', $header) == FALSE)

{

die("The email could not be sent. Please check the email address.");

}

echo "

Email was successfully sent.

";

}

}

/**

* this function create the zip file with the database dump and save it on the ftp server

* @return

*/

protected function createZIP()

{

// Set permissions to 777

chmod($this->config['folder'], 0777);

// create zip file

$zip = new ZipArchive();

// Create file name

$this->datei = $this->config['folder'].$this->config['mysql'][3]."_".date("j_F_Y_g:i_a").".zip";

// Checking if file could be created

if ($zip->open($this->datei, ZIPARCHIVE::CREATE)!==TRUE) {

exit("cannot open datei.">\n");

}

// add mysql dump to zip file

$zip->addFromString("dump.sql", $this->dump);

// close file

$zip->close();

// Check whether file has been created

if(!file_exists($this->datei))

{

die("The ZIP file could not be created.");

}

echo "

The zip was created.

";

}

/**

* this function create the full sql 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;

}

/**

* this function displays the output form to select tables

* @return

*/

public function outputForm()

{

// select all tables from database

$result = mysql_list_tables($this->config['mysql'][3]);

$buffer = '

Select some tables

';

while($row = mysql_fetch_row($result))

{

$buffer .= ''.$row[0].'';

}

$buffer .= '

';

echo $buffer;

}

}

?>

备份用法:

//You can add as many email addresses as you like

$options = array('email' => array('email1', 'email2'),

'folder' => './backup/',

'mysql' => array('localhost', 'root', '****', 'database'));

$b = new Backup($options);

// if submit form start backup

if(isset($_POST['backup']))

{

// start backup

$b->backupDB();

}

// display tables

$b->outputForm();

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值