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