这实际上是两个过程之间协调的问题.
在这里,我写了一个快速的10分钟脚本(只是为了好玩),它启动了一个JVM并发送一个整数值,java解析并返回递增的值…… PHP将把它发送回ad-infinitum ..
PHP.php
echo 'Compiling..', PHP_EOL;
system('javac Java.java');
echo 'Starting JVM..', PHP_EOL;
$pipes = null;
$process = proc_open('java Java', [0 => ['pipe', 'r'],
1 => ['pipe', 'w']], $pipes);
if (!is_resource($process)) {
exit('ERR: Cannot create java process');
}
list($javaIn, $javaOut) = $pipes;
$i = 1;
while (true) {
fwrite($javaIn, $i); //
fwrite($javaIn, PHP_EOL);
fflush($javaIn);
$reply = fgetss($javaOut); //
$i = intval($reply);
echo $i, PHP_EOL;
sleep(1); //
}
Java.java
import java.util.Scanner;
class Java {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while (s.hasNextInt()) { //
int i = s.nextInt();
System.out.print(i + 1); //
System.out.print('\n');
System.out.flush();
}
}
}
要运行脚本,只需将这些文件放在同一个文件夹中即可
$php PHP.php
你应该开始看到打印的数字如下:
1
2
3
.
.
.
请注意,虽然这些数字是由PHP打印的,但它们实际上是由Java生成的