在PHP中执行java类

时间:2013-04-07 08:07:10

标签: java php

我想调用一个java程序并在stdout中获取它的输出。我按照stackoverflow中的建议进行了操作。但它不起作用。

我已将类文件添加到CLASSPATH中。我可以正确执行cmd中的命令,如下所示:

enter image description here

在我的PHP文件中,我通过

调用此程序
exec("java Hello", $output);
print_r($output);

它只会产生:

Array()

有什么问题?我该如何解决这个问题?

ps:Hello是一个演示程序,实际上我要调用的程序要复杂得多,在我的机器上可能需要2秒或更长时间(i5 4G)。

4 个答案:

答案 0 :(得分:2)

我建议使用这里找到的Java / PHP Bridge:http://php-java-bridge.sourceforge.net/pjb/ 这很容易安装并且运行良好。

另外,我建议使用以下链接下载它。 (它与下载中的链接 - >文档相同)

http://sourceforge.net/projects/php-java-bridge/files/Binary%20package/php-java-bridge_6.2.1/php-java-bridge_6.2.1_documentation.zip/download

该文件是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");
}