当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)
}
返回值
从执行的命令或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 ]])
^^^^^^^^^^^^^^^^
感谢您的回答。我没有想到重定向脚本的输出可能是问题的根源。我尝试使用exec,但$输出在某种程度上不一致,不可靠,并且http://stackoverflow.com/a/10828773将我定向到system()。 – 2013-02-20 14:03:59
@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)
}
值得注意的是'system()'的第二个参数不是脚本输出,它是返回值。除了名字,你的代码没问题,但我想我应该澄清一点,以避免将来的读者混淆。 – 2013-02-20 15:07:38
嗨。第6行有语法错误(缺少括号)。 – Tegos 2017-09-26 07:55:09