2

我正在使用命令:

shell_exec("java -version");

检测安装的 Java 版本。已安装 Java。PHP 脚本在用户“daemon”下运行。从命令行运行此命令:

su daemon -c 'java -version'

输出

java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.1) (6b27-1.12.1-2ubuntu0.12.04.2)
OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)

我知道使用 shell_exec 可以与 Java 和 PHP 一起使用,因为在代码的其他地方我正在使用它运行 java .jar 文件。

我在这里错过了什么吗?

4

3 回答 3

3

添加2>&1到您的 shell 命令的末尾以STDERR返回以及STDOUT.

$output = shell_exec("java -version 2>&1");
于 2016-10-04T23:49:23.910 回答
0

尝试这个 -exec('java -version', $output);

它是 exec() 而不是 shell_exec()

更多细节在这里

于 2013-07-09T20:13:56.960 回答
0

看起来 Java 正在将输出直接发送到标准输出。如果您在命令行上运行带有反引号的命令(如文档所述命令等效于),并尝试将其存储在变量中,您会看到它被打印出来,但没有存储在变量中。

例如:

foo=`java -version`
print $foo // results in nothing

然而:

foo=`ls`
print $foo // results in the results of ls

您可以尝试将exec与输出变量一起使用。

于 2013-07-09T20:15:44.533 回答