【问题标题】:php exec() & java send parametersphp exec() & java 发送参数
【发布时间】:2012-12-16 14:56:06
【问题描述】:

我想通过 php 连接到 java 并在 php 中打印结果。现在我想向java发送一个参数并将其返回给php以查看它是如何工作的。我怎样才能做到这一点? 到目前为止我有这个代码:

PHP:

exec("java jar/name.jar", $output);
print_r($output);

Java:

public class Main {
    public static void main(String[] args) {
        System.out.print(args[0]);
    }
}

结果是

Array ( )

【问题讨论】:

    标签: java php exec


    【解决方案1】:

    exec("/full/path/to/java -jar jar/name.jar 2>&1", $output);
    print_r($output);
    

    因为

    • 您的 PHP 环境可能没有在路径中定义 java 可执行文件(也不应该)
    • jar 文件使用java -jar 执行
    • 您希望2>&1 能够在输出中看到错误消息(从 stderr 重定向到 stdout)

    【讨论】:

    • 第三点在没有它的情况下非常有用,有些程序不输出任何东西,不知道为什么!
    • @AbhishekK 因为它会在 stderr 上打印错误,并且通常只捕获标准输出,正常输出的地方
    【解决方案2】:

    你的 java 程序需要至少一个参数,但是 php 代码没有给出它,所以改变你的

    exec('java jar/name.jar', $output);
    

    exec('java jar/name.jar some_value', $output);
    

    编辑:

    你没有指定参数时得到Array()的原因可能是因为java发送的错误是发送到stderr,而$output只从stdout获取数据

    【讨论】:

    • 我按照你说的做了,但是数组也是空的。
    • @bw2801 你确定你的 java jar/name.jar 部分正确吗?这意味着相对于您的 php 文件,文件 name.jar 位于地图 jar 中。我测试它的方法是:在与您的代码相同的目录中创建 test.php 和 Main.java。运行 javac Main.java 并运行 php test.php (test.php 有 exec('java Main some_value', $output);
    • 文件夹“jar”与php文件在同一目录中。
    • 你可以尝试使用php -a,这样会以交互方式打开php,然后输入exec('java jar/name.jar some_value', $output);也许它会给你更多的信息
    【解决方案3】:

    考虑使用 RESTful 设计。将 Java 程序放在一个 URL 并使用 PHP *file_get_contents()* 从 URL 读取。 Java 程序写入浏览器输出流的任何内容都将在该函数加载的 PHP 变量中可见。

    【讨论】:

      【解决方案4】:

      如果您真的想将原生 Java 代码集成到您的 PHP 应用程序中,PHP/Java Bridge 可能能够以比执行 exec()-ing java 代码更好的方式解决这个问题。

      然而,为您的 Java 功能创建一个小型服务是首选方式,然后通过基于 Web 的小型 API 公开这些功能(最好使用 JSON 作为交换格式)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-10
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多