如何通过Java与PHP CLI交互
我计划在我的Java程序中使用PHP库,方法是制作一个PHP CLI交互式shell,其中包含用于我需要的所有函数的命令,然后从Java调用这些命令。大多数命令将向控制台打印一个字符串,然后我将用Java将其解析为所需的数据 目前我的Java代码如下所示:如何通过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.
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