2

私は私の問題について多くの同様のSOの質問を読みましたが、どれも私の問題を抱えていないようです。関連する場合は、Apache2.2でPHP5.3.8を実行しており、PHP exec()は次のように実行されます。nt authority\system

$cmd = "java -version";
$res = exec($cmd, $output, $return);

var_dump($res, $output, $return);

生産:

string '' (length=0)

array
    empty

int 0

$return0であることは、これが成功したことを示します。興味深いことに、私が実行した場合:

$cmd = "java -version 2> response";

期待される出力でファイルが作成されます。

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)

だから私の質問:なぜ$output人口が増えないのですか?

コメントの更新

の結果$res = exec("dir c:", $output, $return);

string '               2 Dir(s)  335,636,791,296 bytes free' (length=51)

array
    0 => string ' Volume in drive C is Local Disk' (length=32)
    1 => string ' Volume Serial Number is D87C-E25C' (length=34)
    2 => string '' (length=0)
    ...
    12 => string '               5 File(s)          1,158 bytes' (length=45)
    13 => string '               2 Dir(s)  335,636,791,296 bytes free' (length=51)

int 0
4

3 に答える 3

8

これを試して

$output = `java -version 2>&1`

コマンドの周りのバッククォートに注意してください。これはシェルコマンドとまったく同じように機能します。

2>&1は、デフォルトでjavaがstderrorを使用するため、エラーをstdoutにリダイレクトする必要があります。

于 2012-09-04T09:19:44.497 に答える
0

「答え」ではありませんが、私がやったことは、すべての出力をSTDOUTにリダイレクトし$return、0をチェックすることでした。

これはこのバグに関連している可能性があります。5.3を実行している場合でも、シナリオと一致しているようです。

于 2012-09-10T13:02:47.260 に答える
0

2番目の例では、最初のケースではそうしないのにstderrストリームをリダイレクトするように、リンゴとオレンジを比較しているようです。呼び出しを使用している間は、常にstderrをstdoutにリダイレクトすることをお勧めしexecます。そうしないと、この出力が失われます。

于 2012-09-04T09:23:22.183 に答える