我已经阅读了很多关于我的问题的类似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
答案 0 :(得分:8)
试试这个
$output = `java -version 2>&1`
注意命令周围的反引号,它与shell命令完全相同
2>& 1应该将错误重定向到stdout,因为java默认使用stderror!
答案 1 :(得分:0)
您似乎将苹果与橙子进行比较,因为在第二个示例中,您重定向stderr流,而在第一种情况下不执行此操作。我建议在使用exec
等调用时始终将stderr重定向到stdout,否则会丢失此输出
答案 2 :(得分:0)
虽然不是“答案” - 我最终做的是将所有输出重定向到STDOUT并检查$return
是否为0。
这可能与this bug有关,即使我正在运行5.3它似乎与我的情景相符