1

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

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

在此处输入图像描述

在我的 PHP 文件中,我调用这个程序

exec("java Hello", $output);
print_r($output);

它只产生:

Array()

问题是什么?我怎样才能解决这个问题?

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

4

4 回答 4

2

我建议使用这里的 Java/PHP 桥: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 也可以使用,但它与我的邮件服务器不兼容。

于 2013-04-07T09:07:03.370 回答
1

试试这个:

exec('java -cp .:/path/to/folder/of/your/file Hello 2>&1', $output);
print_r($output);

需要2>&1显示错误。

于 2013-09-28T19:11:37.197 回答
0

好吧,它产生数组对吗?所以改为print_r($output)尝试print($output[0])在我的控制台上输出“Hello World”:D

于 2013-04-07T08:18:40.443 回答
0

试管_

$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");
}
于 2013-04-07T08:29:27.650 回答