如何在PHP中运行Java程序并获取输出?

Ste*_*ier 9 php exec

我想运行类似的东西(在myProgram.sh中):

java -cp whatever.jar com.my.program $1
Run Code Online (Sandbox Code Playgroud)

在PHP中并读取输出.

到目前为止我有类似的东西:

$processOrderCommand = 'bash -c "exec nohup setsid /myProgram.sh ' . $arg1 . ' > /dev/null 2>&1 &"';
exec($processOrderCommand);
Run Code Online (Sandbox Code Playgroud)

但我真正喜欢的是能够在PHP脚本中获取java程序的输出而不只是将其作为另一个线程执行.

如何才能做到这一点?

Col*_*ert 7

你可以这样做 :

exec($processOrderCommand, $output);
Run Code Online (Sandbox Code Playgroud)

从文档:

如果output参数存在,那么指定的数组将填充命令的每一行输出.尾随空格(例如\n)不包含在此数组中.请注意,如果数组已包含某些元素,则exec()将附加到数组的末尾.如果您不希望函数附加元素,请在将数组传递给exec()之前调用数组上的unset ().

为了更好地控制您的执行,您可以查看 proc_open()


资源:

  • @Stephane Grenier,因为`-version`的输出在错误流上;) (2认同)

Ste*_*ier 0

关键是 shell_exec PHP 脚本中的类路径必须是绝对路径。

或者至少这是我让它正常工作的唯一方法。基本上,几乎不可能在不同的环境中区分 php 脚本运行 JVM 的相对目录是什么。

此外,它还有助于放置 java 的绝对路径位置,例如 usr/.../bin/java