日期:2014-05-16  浏览次数:20421 次

用php实现备份数据库ZIP及导出
   经常在有的PHP开源系统中,看到有备份数据库并导出的方法,其实代码不复杂,下面
大概讲解下,以WINDOWS为例子,两类方法,一个是目录文件夹要有执行脚本权限的,
一个个是没有权限的,代码如下:

一)
  
<?php 
  
$username = "root";  
$password = "";  
$hostname = "localhost";  
$dbname   = "test"; 
  

$dumpfname = $dbname . "_" . date("Y-m-d_H-i-s").".sql"; 
$command = "C:\\xampp\\mysql\\bin\\mysqldump --add-drop-table --host=$hostname 
    --user=$username "; 
if ($password)  
        $command.= "--password=". $password ." ";  
$command.= $dbname; 
$command.= " > " . $dumpfname; 
system($command); 
  
// zip 数据文件
$zipfname = $dbname . "_" . date("Y-m-d_H-i-s").".zip"; 
$zip = new ZipArchive(); 
if($zip->open($zipfname,ZIPARCHIVE::CREATE))  
{ 
   $zip->addFile($dumpfname,$dumpfname); 
   $zip->close(); 
} 
  
// read zip file and send it to standard output 
if (file_exists($zipfname)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($zipfname)); 
    flush(); 
    readfile($zipfname); 
    exit; 
} 
?> 



方法2 文件夹没相关权限

<?php 
ob_start(); 
  
$username = "root";  
$password = "";  
$hostname = "localhost";  
$dbname   = "test"; 
  
$command = "C:\\xampp\\mysql\\bin\\mysqldump --add-drop-table --host=$hostname 
    --user=$username "; 
if ($password)  
        $command.= "--password=". $password ." ";  
$command.= $dbname; 
system($command); 
  
$dump = ob_get_contents();  
ob_end_clean(); 
  

//不ZIP了
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($dbname . "_" .  
    date("Y-m-d_H-i-s").".sql")); 
flush(); 
echo $dump; 
exit();]]> 
?>