經常在有的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();]]> ?>