exec()错误响应

时间:2012-09-18 07:23:26

标签: php exec

让我们以此命令为例:

$command = "echo '/just/for/the/test /heh/' | awk '//just// {print $1}'";

直接在shell中复制它时,我收到以下错误:

awk: cmd. line:1: //just// {print $1}
awk: cmd. line:1:         ^ unterminated regexp

但是,当我exec()时,我得到没有输出的状态代码1:

exec($command, $output, $status);

var_dump( $command, $output, $status );

// string(69) "echo '/just/for/the/test /heh/' | awk '//just// {print $1}'"
// array(0) { }
// int(1)

如何检索exec的STDERR部分?

2 个答案:

答案 0 :(得分:5)

你应该像这样将stderr重定向到stdout

$stout = exec($command . " 2>&1", $output, $status);

另见此处 PHP StdErr after Exec()

答案 1 :(得分:3)

exec()我能想到的唯一方法是将STDERR重定向到正在执行的命令中的STDOUT,如:

$command = "echo '/just/for/the/test /heh/' | awk '//just// {print $1}' 2>&1";

exec()的替代方法是使用proc_open()系列函数。使用proc_open()执行命令并打开指向STDIN,STDOUT和STDERR的文件指针,您可以从中读/写

请参阅manual了解详情