用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();]]>   
 ?> 


你可能感兴趣的:(PHP,导出)