2016-04-29 101 views
1

以下是我通過互聯網找到的使用php獲取數據庫備份的代碼。代碼在本地主機中正常工作。但是當它位於在線服務器中時,它無法正常工作。它會創建一個數據庫.sql文件,但文件是空的。問題是什麼??我認爲這是一個服務器權限問題。我怎麼能讓這個代碼在我的在線服務器上工作? :(使用PHP獲取數據庫備份

<?php 
$con = mysqli_connect("localhost","root","","dhn_online_db"); 

$tables = array(); 
$query = mysqli_query($con, 'SHOW TABLES'); 
while($row = mysqli_fetch_row($query)){ 
    $tables[] = $row[0]; 
} 

$result = ""; 
foreach($tables as $table){ 
$query = mysqli_query($con, 'SELECT * FROM '.$table); 
$num_fields = mysqli_num_fields($query); 

$result .= 'DROP TABLE IF EXISTS '.$table.';'; 
$row2 = mysqli_fetch_row(mysqli_query($con, 'SHOW CREATE TABLE '.$table)); 
$result .= "\n\n".$row2[1].";\n\n"; 

for ($i = 0; $i < $num_fields; $i++) { 
while($row = mysqli_fetch_row($query)){ 
    $result .= 'INSERT INTO '.$table.' VALUES('; 
    for($j=0; $j<$num_fields; $j++){ 
     $row[$j] = addslashes($row[$j]); 
     $row[$j] = str_replace("\n","\\n",$row[$j]); 
     if(isset($row[$j])){ 
      $result .= '"'.$row[$j].'"' ; 
     }else{ 
      $result .= '""'; 
     } 
     if($j<($num_fields-1)){ 
      $result .= ','; 
     } 
    } 
    $result .= ");\n"; 
} 
} 
$result .="\n\n"; 
} 

//Create Folder 
$folder = 'Backup_Files/'; 
if (!is_dir($folder)) 
mkdir($folder, 0777, true); 
chmod($folder, 0777); 

$date = date('m-d-Y'); 
$filename = $folder."db_backup_".$date; 
echo $filename; 
$handle = fopen($filename.'.sql','w+'); 
fwrite($handle,$result,0777); 
fclose($handle); 

?> 
+1

你缺少'的error_reporting(E_ALL);'在腳本的開頭添加我提到的代碼,看看有沒有。特定的行會產生錯誤 – MonkeyZeus

+0

我想知道爲什麼你要在PHP中實現'mysqldump',整個事情是用一個單一的命令完成的,例如'mysqldump db> backup $(date +%F_%T).sql' –

+0

There是PHPMyAdmin中的導出函數,如果它對您可用的話。 –

回答

1

爲什麼你想推倒重來

$folder = __DIR__ . DIRECTORY_SEPARATOR . 'Backup_Files/'; 
if (!is_dir($folder)){ 
    mkdir($folder, 0777, true); 
    $date = date('m-d-Y'); 
    exec("mysqldump --user=... --password=... --host=... DB_NAME > {$folder}db_backup_{$date}.sql"); 
} 
+0

他甚至不需要PHP –

+0

@RuslanOsmanov同意了,但我想OP會因爲任何原因使用php。 –

+0

我需要這個功能來創建一個備份文件,當用戶從系統註銷時。 –