当mysqldump无法创建文件时,shell_exec()不返回错误

问题描述:

我想在使用php脚本在其表中播放数据之前备份整个数据库,所以我想过使用mysqldump。当mysqldump无法创建文件时,shell_exec()不返回错误

我试图运行具有了shell_exec mysqldump命令(),并检查它是否是全成这样的:

$command = 'mysqldump -u username -ppassword database > /path/database.sql'; 
$result = shell_exec($command); 

if(!is_null($result)) { 
    echo 'Error during backup'; 
else { 
    echo 'Database saved'; 
    // rest of the php script to modify the database (create/drop tables etc) 
} 

但是我注意到$结果是alwas空,甚至当我给一个路径,其中文件无法写入(不存在现有目录,或者应该返回shell提示符上拒绝的权限)。

我错过了什么?

这为我工作:

$command = 'mysqldump -u username -ppassword database > /path/database.sql'; 
system($command, $output); 

if($output != 0) { 
    echo 'Error during backup'; 
else { 
    echo 'Database saved'; 
    // rest of the php script to modify the database (create/drop tables etc) 
} 
+1

值得注意的是'system()'的第二个参数不是脚本输出,它是返回值。除了名字,你的代码没问题,但我想我应该澄清一点,以避免将来的读者混淆。 – 2013-02-20 15:07:38

+0

嗨。第6行有语法错误(缺少括号)。 – Tegos 2017-09-26 07:55:09

the manual

返回值
从执行的命令或NULL,如果发生错误

但是,您脚本的输出重定向到一个文件的输出:

mysqldump -u username -ppassword database > /path/database.sql 
              ^^^^^^^^^^^^^^^^^^^^ 

这是可能的(我真的不知道)临屋区t mysqldump生成标准返回码(其中0表示OK,其他任何表示error)。如果是这样的话,你应该使用这一机制,虽然你需要a different PHP function

string exec (string $command [, array &$output [, int &$return_var ]]) 
                ^^^^^^^^^^^^^^^^ 
+0

感谢您的回答。我没有想到重定向脚本的输出可能是问题的根源。我尝试使用exec,但$输出在某种程度上不一致,不可靠,并且http://stackoverflow.com/a/10828773将我定向到system()。 – 2013-02-20 14:03:59

+0

@IamZesh - 请注意我突出显示'$ return_var',而不是'$ output'。当然,这是否会起作用取决于mysqldump是否生成标准返回值。我从你的答案中看出它确实如此。 – 2013-02-20 15:04:45

您应该删除-u和-p之间的所有空间和varialbes 还使用“exec()”

$command = "mysqldump -u$username -p$password database > /home/yourusername/public_html/database.sql"; 
exec($command,$result, $output); 

if($output != 0) { 
    echo 'Error during backup'; 
}else { 
    echo 'Database saved'; 
    // rest of the php script to modify the database (create/drop tables etc) 
}