用php传递一个正在运行的jar命令

时间:2016-06-16 20:11:32

标签: java php

所以我有一个Java控制台jar,可以使用我在运行时输入的命令 这也可以用PHP吗?我知道执行jar是用exec(),但我无法通过正在运行的jar命令或获取其输出。

1 个答案:

答案 0 :(得分:2)

您要做的是使用proc_open()而不是exec()初始化jar。 proc_open()允许您使用各个流来读取/写入Java进程的stdin / stdout / stderr。因此,您将启动Java进程,然后您将使用fwrite()将命令发送到Java进程的stdin($pipes[0])。有关详细信息,请参阅proc_open()文档页面上的示例。

编辑这是一个快速的代码示例(只是proc_open文档上示例的一个轻微修改版本):

$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);

$process = proc_open('java -jar example.jar', $descriptorspec, $pipes);

if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt

    fwrite($pipes[0], 'this is a command!');
    fclose($pipes[0]);

    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);

    echo "command returned $return_value\n";
}