4

たとえば、次のコマンドを見てみましょう。

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

シェル内で直接コピーすると、次のエラーが発生します。

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 部分を取得するには?

4

2 に答える 2

5

このようにstderrをstdoutにリダイレクトする必要があります

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

ここも参照してください PHP StdErr after Exec()

于 2012-09-18T07:38:58.753 に答える
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 へのファイル ポインタを開いて、そこから読み取り/書き込みを行うことができます

詳細については、マニュアルを参照してください

于 2012-09-18T07:38:45.150 に答える