使用PHP脚本:为什么mysqldump不转储sql文件?

时间:2014-11-05 04:44:59

标签: php mysqldump

Hye,我是PHP的新手,并试图使用php脚本使用mysqldump 我已经尝试使用命令,转储过程成功。
情况是,当我尝试使用我的本地计算机转储时,转储成功。
但是当代码转移到服务器时,mysqldump没有& #39;工作。我已经尝试了几乎与mysqldump主题相关的解决方案,但它仍然无法正常工作。我希望有人可以指导我。 TQ

<?php

/*-----------------------------------------------
MYSQLDUMP FOR SERVER
------------------------------------------*/


$dbhost = "*****";
$dbuser = "*****";
$dbpass = "*****";
$dbname = "*****";

//set date today
$today=date("d-m-Y");

//set file name
$filename = "leave_".$today.".sql";

//MYSQLDUMP 

//For Server 
$command = sprintf("/usr/bin/mysqldump --opt -h%s -u%s -p%s %s     >/var/www/html/leave/leave/backup/%s",

//for local
//$command = sprintf("c:\AppServ\MySQL\bin\mysqldump --opt -h%s -u%s -p%s %s > %s",

$dbhost,
$dbuser,
$dbpass,
$dbname,
$filename
);
system($command);



/*-------------------------------------------------------------
TO SAVE FILE SQL INTO LOCAL
---------------------------------------------------------------*/

$file = "leave_".$today.".sql";
if(!$file)
{
   // File doesn't exist, output error
      die('File not found');
}
else
{
// Set headers to ask user where to save file.
header('Pragma: anytextexeptno-cache', true);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=$file");

 // Read the file from disk
 readfile($file);


 }



 ?>

2 个答案:

答案 0 :(得分:1)

好的,实际上我在发布问题后几天就已经解决了这个问题。不幸的是,我没有足够的声誉来发表答案。所以我们走了。

以下是需要 TAKE NOTE 的一些事项: -

  1. 必须使用MySQL转储的绝对路径。
  2. 尝试使用--opt(MySQL转储的默认选项)。阅读更多here
  3. 对于选项,如果使用简短形式,则无需( - )。例如: - p。使用完整表格时使用( - )。例如: - 密码。因此,请使用'-p'代替' - p'(也适用于其他选项)。
  4. 如果mysqldump不能用于'exec',请尝试'shell_exec'或'system'。
  5. 尽量避免选项和变量之间有空格。例如:-p $ dbpass
  6. *另外请注意,它是否允许系统命令是否可以从php执行。

答案 1 :(得分:0)

我假设你的php允许通过system()执行命令。

您没有以安全模式运行,或者,如果您是,safe_mode_exec_dir包含您需要的所有命令