PHP:如何获取失败的shell命令的错误消息?

时间:2011-04-29 12:13:43

标签: php bash mysqldump

我执行以下命令进行数据库备份:

$exec = exec("mysqldump --opt 
                        --user=$database_user 
                        --password=$database_pass 
                        --host=$database_host 
                        $database_name > $output_filename", $out, $status);

要检查我是否mysqldump失败:

if ($status == 0) {
   // OK
} else {
   // Error
   // How could I print the error message here ?
}

如果出现问题且mysqldump失败,我怎么能收到错误消息?

3 个答案:

答案 0 :(得分:2)

您可以使用proc_open(同样由Emil建议)。下面是一个如何实现你想要的更完整的例子。

$exec_command = "mysqldump --opt 
                    --user=$database_user 
                    --password=$database_pass 
                    --host=$database_host 
                    $database_name"

$descriptorspec = array(
                       0 => array("pipe", "r"),  // stdin pipe 
                       1 => array("file", $output_filename, "w"),  // stdout to file  
                       2 => array("pipe", "w")   // stderr pipe 
);

$proc = proc_open($exec_command, $descriptorspec, $pipes);

fwrite($pipes[0], $input); //writing to std_in
fclose($pipes[0]);

$err_string = stream_get_contents($pipes[2]); //reading from std_err
fclose($pipes[2]); 

$return_val = proc_close($proc);

编辑:

更改输出以写入文件

答案 1 :(得分:1)

如果您想阅读stderr,则需要使用proc_open。手册中的示例可以帮助您。

答案 2 :(得分:0)

如果您使用的是shell_exec,请在命令后附加2>& 1,它会将STDERR重定向到STDOUT。