mysqldump通过PHP

Ros*_*lan 9 php mysqldump

我有一个PHP脚本,它传递了远程服务器的MySQL连接细节,我希望它执行一个mysqldump命令.为此,我使用的是php exec()函数:

<?php
exec("/usr/bin/mysqldump -u mysql-user -h 123.145.167.189 -pmysql-pass database_name > /path-to-export/file.sql", $output);
?>
Run Code Online (Sandbox Code Playgroud)

当正确的登录详细信息传递给它时,它将完全正常工作.然而,我无法检查,如果它按预期执行,如果不找出为什么不.所述$output阵列返回为空,而如果我直接在命令行上运行命令打印出告诉我登录失败的消息.我想捕获这些错误消息并显示它们.有关如何做到这一点的任何想法?

Fab*_*ora 15

你应该检查exec函数的第三个参数:&$return_var.

$return_var = NULL;
$output = NULL;
$command = "/usr/bin/mysqldump -u mysql-user -h 123.145.167.189 -pmysql-pass database_name > /path-to-export/file.sql";
exec($command, $output, $return_var);
Run Code Online (Sandbox Code Playgroud)

按照Unix中的惯例,当出现问题时,进程会返回0以外的任何内容.

所以你可以:

if($return_var) { /* there was an error code: $return_var, see the $output */ }
Run Code Online (Sandbox Code Playgroud)


Jaz*_*azZ 6

我找到的解决方案是在子 shell 中运行命令,然后输出stderrstdout( 2>&1)。这样,该$output变量将填充错误消息(如果有)。

IE :

exec("(mysqldump -uroot -p123456 my_database table_name > /path/to/dump.sql) 2>&1", $output, $exit_status);

var_dump($exit_status); // (int) The exit status of the command (0 for success, > 0 for errors)
echo "<br />";
var_dump($output); // (array) If exit status != 0 this will handle the error message. 
Run Code Online (Sandbox Code Playgroud)

结果 :

整数(6)

array(1) { [0]=> string(46) "mysqldump: 找不到表:"table_name"" }

希望能帮助到你 !