使用PHP获取数据库备份

时间:2016-04-29 17:14:09

标签: php database mysqli backup

以下是我在互联网上找到的使用php获取数据库备份的代码。代码在本地主机中正常工作。但是当它在在线服务器中时,它无法正常工作。它创建一个数据库.sql文件,但该文件为空。问题是什么??我认为这是服务器权限问题。如何在我的在线服务器上运行此代码。??? :(

<?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 个答案:

答案 0 :(得分: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");
}
相关问题