我想在使用php脚本播放其表之前备份完整的数据库,所以我考虑使用mysqldump。
我尝试使用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)
}
但是我注意到$ result是空的,即使我给出了一个无法写入文件的路径(没有现有的目录,或者应该在shell提示符下返回权限的东西)。
我错过了什么?
答案 0 :(得分:4)
这对我有用:
$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 :(得分:1)
来自the manual:
返回值
执行命令的输出,如果发生错误,则为NULL
但是,您将脚本的输出重定向到文件:
mysqldump -u username -ppassword database > /path/database.sql
^^^^^^^^^^^^^^^^^^^^
有可能(我真的不知道)mysqldump生成标准返回码(其中0
表示OK
,其他任何表示error
)。如果是这种情况,您应该使用该机制,但需要a different PHP function:
string exec ( string $command [, array &$output [, int &$return_var ]] )
^^^^^^^^^^^^^^^^
答案 2 :(得分:1)
您应该删除-u和-p以及变量之间的所有空格 也使用" 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)
}