通过传递大文本从php调用JavaJAR的最佳/最快方法是什么?
这是一个场景:我有一个php脚本,它构建html并将其回送到浏览器。在回显html之前,我需要调用可执行的JavaJAR文件并将html传递给它,以便它能够处理它并将其返回给php进行回显 我现在能想到的唯一方法是将html保存到临时文件中,将文件名传递给java,让它修改它,然后在php中再次加载它。我猜这可能相当慢,需要将文件写入磁盘,然后读取、修改、再次写入和再次读取 我的问题是:在给定的场景中,有没有一种更快的方法将html文件传递给java并返回给php通过传递大文本从php调用JavaJAR的最佳/最快方法是什么?,java,php,linux,apache,Java,Php,Linux,Apache,这是一个场景:我有一个php脚本,它构建html并将其回送到浏览器。在回显html之前,我需要调用可执行的JavaJAR文件并将html传递给它,以便它能够处理它并将其返回给php进行回显 我现在能想到的唯一方法是将html保存到临时文件中,将文件名传递给java,让它修改它,然后在php中再次加载它。我猜这可能相当慢,需要将文件写入磁盘,然后读取、修改、再次写入和再次读取 我的问题是:在给定的场景中,有没有一种更快的方法将html文件传递给java并返回给php 我当前的堆栈:Apache2.
我当前的堆栈:Apache2.4、PHP5.4.7、Java 7、OS:Ubuntu我使用了Marc B建议的解决方案,由于在线上没有明确的例子,我正在粘贴我的PHP和Java代码,以防将来有人需要它: PHP代码:
<?php
$process_cmd = "java -jar test.jar";
$env = NULL;
$options = ['bypass_shell' => true];
$cwd = NULL;
$descriptorspec = [
0 => ["pipe", "r"], // stdin is a pipe that the child will read from
1 => ["pipe", "w"], // stdout is a pipe that the child will write to
2 => ["pipe", "w"] // stderr is a file to write to
];
$process = proc_open($process_cmd, $descriptorspec, $pipes, $cwd, $env, $options);
if (is_resource($process)) {
//feeding text to java
fwrite($pipes[0], "Test text");
fclose($pipes[0]);
//echoing returned text from java
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 "\n command returned $return_value\n";
}
?>
proc\u open
?PHP用它启动java小程序,然后通过proc handle的stdout将html传递给应用程序,在java中显示为stdin。谢谢,这看起来很有希望,我只需要找到一个合适的例子,看看它是如何工作的。
package Test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null) {
System.out.println(input + " java test string ");
}
}
}