PHPバックアップMYSQLデータベース
2959 ワード
<?php
require(dirname(__FILE__).'/config.php');
//
if(post_get('act', 1)=='bak'){
$file_name = $_POST['file'];
$bak_connection = db::factory('mysql');
$query = 'show tables';
$tables_arr = $bak_connection->get_array($query);
$file_content = '';
//
foreach($tables_arr as $value){
$table = $value['Tables_in_'.$current_conf['DBNAME']];
if(!empty($table)){
$query = 'show create table '.$table;
$file_content .= "DROP TABLE IF EXISTS `$table`;\r
";
//
$table_destruct = $bak_connection->get_array($query);
$file_content .= str_replace("
", '', str_replace("\r
", "
", $table_destruct[0]['Create Table'])) . ";\r
\r
";
//$msg = $table.' ';
//
$query = 'SELECT * FROM '.$table;
$table_data = $bak_connection->get_array($query);
foreach($table_data as $key => $value){
$file_content .= "INSERT INTO `$table` VALUES('";
$value_arr = array_values($value);
$file_content .= implode("','" , $value_arr);
$file_content .= "');\r
\r
";
}
//$msg .= $table.' ';
}
}
$file_content = iconv('GBK' , 'UTF-8' , $file_content);
/*
$fp = fopen($path , 'w') or die(' , ');
fputs($fp , $file_content);
fclose($fp);
unset($fp);
*/
header("Content-type: text/plain");
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=".$file_name);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header("Pragma: no-cache" );
header("Expires: 0" );
exit($file_content);
}
//
if(post_get('act', 1)=='restore'){
$sql_file = $_POST['file'];
$bak_connection = db::factory('mysql');
$fp = fopen($sql_file , 'r');
while(!feof($fp)){
$line = fgets($fp);
if(trim($line)!='' || trim($line)!=null){
$temp_line = iconv('utf-8' , 'gbk' , $line);
$result = $bak_connection->execute($temp_line);
if($result){
redirect('back.php' , ' ');
}
redirect('back.php' , ' ');
}
}
}
config.phpというファイルは私自身で、主にMYSQL接続を生成するために使用されています.
$bak_connection = db::factory('mysql');
知らないことは以前書いたものを参考にしてください.http://blog.csdn.net/tomyjohn/article/details/7675770