如何通过Java与PHP CLI交互

如何通过Java与PHP CLI交互,java,php,command-line-interface,Java,Php,Command Line Interface,我计划在我的Java程序中使用PHP库,方法是制作一个PHP CLI交互式shell,其中包含用于我需要的所有函数的命令,然后从Java调用这些命令。大多数命令将向控制台打印一个字符串,然后我将用Java将其解析为所需的数据 目前我的Java代码如下所示: ProcessBuilder builder = new ProcessBuilder( "Q:\\Instagram\\new\\php.bat", "main.php"); builder.

我计划在我的Java程序中使用PHP库,方法是制作一个PHP CLI交互式shell,其中包含用于我需要的所有函数的命令,然后从Java调用这些命令。大多数命令将向控制台打印一个字符串,然后我将用Java将其解析为所需的数据

目前我的Java代码如下所示:

ProcessBuilder builder = new ProcessBuilder(
                "Q:\\Instagram\\new\\php.bat", "main.php");
        builder.directory(new File("Q:\\Instagram\\new"));
        builder.redirectErrorStream(true);
        Process p = builder.start();
        p.waitFor();

        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

        System.out.println("The first output is: ");

        Scanner scanner = new Scanner(reader);
        while (scanner.hasNextLine()) {
            System.out.println("Output: " + scanner.nextLine());
        }

        writer.flush();
        writer.write("Test two");
        writer.newLine();

        System.out.println("The second output is: ");

        scanner = new Scanner(reader);
        while (scanner.hasNextLine()) {
            System.out.println("Output: " + scanner.nextLine());
        }
我的PHP脚本main.PHP是:

<?php
print_r("Test One\n");
print_r(fgets(STDIN));
?>
现在叫我笨蛋,但如果我不删除那行,它应该输出这个吗

The first output is: 
Output: 
Output: Q:\Instagram\new>Q:\Robobot\PHP\php.exe main.php         main.php0 
Output: Test one
The second output is: 
然后等待Java代码执行以下操作:

writer.flush();
writer.write("Test two");
writer.newLine();
然后最后输出:

Test two
Test two

Process finished with exit code 0
(测试2显示两次,因为第一次是控制台的输入,第二次是PHP脚本重复它)


一些附带的信息,我在IntelliJ的Windows上做这个,但我计划最终在Ubuntu上运行它。上面的例子是我从IntelliJ内部运行它得到的,但是当我从命令行运行它时得到了相同的结果。

只是为了澄清一下,我想从Java运行PHP shell。用OutputStream输入我的命令,用PHP处理命令,将结果打印成字符串,然后用InputStream用Java解析。1)这太可怕了。2) .您正在记录php错误吗?如果是,脚本是否会导致任何错误?如果您没有,请打开并重试@Terminus无错误。@ElliotFrisch PHP脚本必须持续运行才能发送keepalive数据包。如果从Quercus运行交互式shell,我仍然可以向它发送命令吗?
Test two
Test two

Process finished with exit code 0