从网站上的 PHP 脚本运行 Java 类文件
Posted
技术标签:
【中文标题】从网站上的 PHP 脚本运行 Java 类文件【英文标题】:Run Java class file from PHP script on a website 【发布时间】:2011-01-08 20:59:25 【问题描述】:我有一个网站,并希望能够允许用户从该网站在服务器上运行 Java 文件。
我希望用户单击一个按钮,该按钮将在服务器上运行 Java 文件,并且由 Java 程序打印到标准输出的任何内容都将打印在网站上供用户查看。
如何做到这一点(从 php 调用 Java 程序并将 Java 文件中的标准实时反馈回 PHP 网站)?
更新:
感谢有关如何从 PHP 运行 Java 程序的答案。但是我也希望能够,因为 Java 程序正在打印到标准输出,它将在执行时打印出大量文本,以便能够在网页上打印出来,以便用户可以看到哪个阶段Java 程序正在执行中。
如何做到这一点,是否需要任何额外的 AJAX 或 javascript 或类似的东西?
【问题讨论】:
【参考方案1】:查看exec 和另一个program execution functions。但是非常小心地这样做,否则这是一个漏洞利用的秘诀。
【讨论】:
【参考方案2】:passthru功能有用吗?
http://www.php.net/manual/en/function.passthru.php
【讨论】:
【参考方案3】:由于您提到实时,我建议设置 PHP 到 Java 桥。在每次请求时初始化 JVM 会占用大量资源。
PHP/Java Bridge
PHP/Java 桥是一个 流式传输的实现, 基于 XML 的网络协议,可以 用于连接原生脚本 引擎,例如 PHP、Scheme 或 Python,带有 Java 或 ECMA 335 虚拟机。最多50次 比通过 SOAP 的本地 RPC 更快, 需要更少的资源 网络服务器端。它更快而且 比直接更可靠 通过 Java Native 进行通信 接口,它不需要 调用 Java 的附加组件 来自 PHP 的程序或 PHP 程序 来自Java。
【讨论】:
【参考方案4】:PHP exec()
函数是要走的路,但你应该非常小心在你允许执行的..换句话说,不要依赖用户输入,因为它可能会危及您的整个服务器。
使用 exec 调用 Java 应用程序启动器,您可以从 PHP 执行任何 Java 应用程序,例如
<?php exec("java -jar file.jar arguments", $output); ?>
【讨论】:
嗨 james,执行 java 给我权限被拒绝错误。我的用户是 apache。 我利用了你的好答案,现在我可以将 php 连接到 java,但是我的 Java 程序有System.in
输入并且 exec 总是启动一个新的 java 程序,而不发送到同一个等待的 java 程序,我该如何改变呢?【参考方案5】:
我宁愿将 Java 类包装在 Java 小程序中,然后可以从客户端的 javascript 调用中调用它:请参阅 http://www.rgagnon.com/javadetails/java-0170.html
否则,如果调用向标准输出抛出大量文本,或者由于系统依赖性而必须在服务器上运行该类,则从 php exec 调用是可行的方法,但您可能需要类似 @ 987654322@在客户端实时显示文本。有各种 javascript 工具包的实现,例如 Dojo 或 jQuery。
对于服务器端,phphere中似乎有cometd实现。
我希望这会有所帮助...
菲利普
【讨论】:
以上是关于从网站上的 PHP 脚本运行 Java 类文件的主要内容,如果未能解决你的问题,请参考以下文章