Windows上的PHP执行Java不会产生任何输出


PHP exec Java on Windows produces no output

我已经阅读了很多关于我的问题的类似SO问题,似乎没有一个有我的问题。如果相关的话,我在Apache 2.2上运行PHP 5.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

$return为0暗示这是成功的。有趣的是,如果我运行:

$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

尝试这个

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

注意命令周围的反信号,它的作用与shell命令完全一样

2> &1应该将错误重定向到stdout,因为java默认使用stderror!

您似乎在比较苹果和桔子,因为在第二个例子中,您重定向stderr流,而在第一个例子中您没有这样做。我建议在使用exec之类的调用时始终将stderr重定向到stdout,否则您将丢失此输出

虽然不是"答案",但我最终做的是将所有输出重定向到STDOUT,并检查$return是否为0。

这可能与这个错误有关,尽管我运行的是5.3,但它似乎与我的场景

相匹配