我想调用一个java程序并在stdout中获取它的输出。我按照stackoverflow中的建议进行了操作。但它不起作用。
我已将类文件添加到CLASSPATH中。我可以正确执行cmd中的命令,如下所示:
在我的PHP文件中,我通过
调用此程序exec("java Hello", $output);
print_r($output);
它只会产生:
Array()
有什么问题?我该如何解决这个问题?
ps:Hello是一个演示程序,实际上我要调用的程序要复杂得多,在我的机器上可能需要2秒或更长时间(i5 4G)。
答案 0 :(得分:2)
我建议使用这里找到的Java / PHP Bridge:http://php-java-bridge.sourceforge.net/pjb/ 这很容易安装并且运行良好。
另外,我建议使用以下链接下载它。 (它与下载中的链接 - >文档相同)
该文件是JavaBridge.war。您可能希望将Tomcat用于Java EE容器。一旦设置了Tomcat,您只需将此文件放在webapps文件夹中即可安装。
如果你想在PHP中经常使用java类,这是我所知道的最好的方法,我已经尝试了很多。 Resin也有效,但它与我的邮件服务器不太搭配。
答案 1 :(得分:1)
试试这个:
exec('java -cp .:/path/to/folder/of/your/file Hello 2>&1', $output);
print_r($output);
2>&1
需要显示错误。
答案 2 :(得分:0)
嗯,它产生阵列对吗?所以请print_r($output)
尝试print($output[0])
,在我的控制台上输出“Hello World”:D
答案 3 :(得分:0)
尝试pipe
$command = 'java Hello';
$descriptorspec = array(
1 => array(
'pipe', 'w'
)
);
$process = proc_open($command, $descriptorspec, $pipes);
if (!is_resource($process)) {
exit("failed to create process");
}
$content = stream_get_contents($pipes[1]);
fclose($pipes[1]);
if (proc_close($process) === 0) {
print_r($content);
}else{
exit("failed to execute Hello");
}