我有一个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)
我找到的解决方案是在子 shell 中运行命令,然后输出stderr到stdout( 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"" }
希望能帮助到你 !