【问题标题】:How to use Java from PHP 5如何从 PHP 5 使用 Java
【发布时间】:2011-08-20 00:52:32
【问题描述】:

我看过不少关于从 PHP 中使用 Java 的教程,但它们似乎相互冲突。他们中的许多人说要更改 php.ini 以使用 dll 文件,但显然现在 PHP 5 中有“内置”功能。但这需要Tomcat?我必须摆脱 Apache 才能运行它吗? http://php-java-bridge.sourceforge.net/pjb/installation.php 说将 .war 文件放入 Tomcat 的 autodeploy 目录,但我没有看到任何名为“autodeploy”的目录。有人会逐步解释如何让 Java 的东西在带有 PHP 5 和 Apache 的 Windows 机器(我使用的是 Windows 7)上运行吗?

【问题讨论】:

  • 或许您可以解释一下为什么要混合使用 Java 和 PHP?
  • 因为我将使用完全用 Java 编写的 CMU Sphinx 4。我有一个 Java 应用程序来执行语音识别任务,还有一个 php 应用程序来收集音频。现在我收集音频并稍后用 Sphinx 分析它,然后一有机会就通过电子邮件发送结果。我需要更改应用程序以收集音频、运行语音识别并立即通过 php 应用程序发回结果。
  • autodeploy目录的意思是tomcat主目录下的webapps目录。
  • 为什么不使用 Java 收集音频呢?为什么要制作如此狂野的混音?

标签: java php apache windows-7


【解决方案1】:

您可能会发现大量关于如何使用 PHP webapp 中的 Java 类的无用和过时信息,这些信息根本没有帮助。大约一年前,我遇到了一个类似的问题,我发现在生产中使用的唯一成熟的方法是 PHP/Java Bridge——你在 Sourceforge 上找到的那个。它比人们预期的效果更好,并且不需要 Java 知识(但是,如果您确实了解 Java,则应该考虑为此目的编写一个 Web 服务并在 PHP 端使用它)。

Bridge 的文档不是很明显,但是请记住,您应该坚持使用它,不要阅读描述不同方法的其他资源 - 不要混淆,即您不必安装任何 PHP 扩展或smth——所有这些都与从 PHP 调用 Java 的另一种(通常是过时且不受支持的)方式有关。

PHP/Java Bridge 是一种网络协议,因此您在 PHP 端唯一需要做的就是确保在您的 php.ini 中启用“allow_url_include”

从 Java 端,您必须将 PHP/Java Bridge 绑定到一个空闲端口并监听连接。然后,您的 PHP 应用程序将能够对 Bridge 的代理文件执行“require_once”,该文件将在该端口上可用。就是这样,您可以使用代理 Bridge 对象从您的 PHP 脚本中透明地实例化和调用 Java 类(它将在后台序列化和传输调用和结果)。

有两种方法可以启动网桥并将其绑定到某个本地端口。

1) 复杂的一个:设置一个 Tomcat,用网桥本身和你想使用的库创建一个 war 文件。这里描述了这种方式:

http://php-java-bridge.sourceforge.net/pjb/webapp.php

要将战争部署到您的 Tomcat 安装中,只需将战争放入 Tomcat 的 webapp 文件夹并重新启动它。

2) 更简单的方法:打包一个 jar 而不是 war 并运行它(它将使用嵌入式 Web 服务器,因此您不必安装 Tomcat 和部署任何东西)。要走这条路,请参阅此页面:

http://php-java-bridge.sourceforge.net/pjb/desktop-apps.php

这两种方式都适合您(不要在第二个选项中查看“桌面”一词,这种方式也适用于您的 PHP webapp)。

请参阅“示例”部分中有关如何使用它的示例(显然)。您也可以参考我的小型 PHP 客户端,它使用 PHP/Java Bridge 与 Java 中的 Neo4J 嵌入式数据库对话。然而,这个示例可能更复杂,它旨在部署到 Tomcat,无论如何您都可以知道如何实例化和使用其中的类:

https://github.com/coffeesnake/neo4j-php-wrapper

【讨论】:

    【解决方案2】:

    您可以通过分叉一个进程并通过标准输入/标准输出进行通信,从而从 PHP 调用一个简单的 Java 应用程序。或者,如果您将 Sphinx 集成到 Web 应用程序中,您可以通过 HTTP 调用进行集成。

    【讨论】:

    • 我不想多次调用 java,只调用一次,然后就要识别的新音频文件进行通信。这是因为在分配识别器时有很多开销,但在那之后不会太多。一个 webapp 听起来很有趣,但我以前从未写过......
    【解决方案3】:

    Quercus:

    Quercus 是 Caucho Technology 的快速、开源、100% Java 实现的 PHP 语言。 Quercus 是 Caucho Technology 的 Resin Application Server 的一项功能,内置于 Resin 中 - 无需额外下载/安装。使用 Resin 的开发人员无需安装标准 PHP 解释器 (http://www.php.net) 即可启动 PHP 项目,因为 Quercus 承担了 PHP 引擎的角色。

    【讨论】:

    • 整洁。它是 GPL,所以我绝对可以将它用于我的研究应用程序。
    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2019-12-29
    • 2015-06-19
    相关资源
    最近更新 更多