我有一个网站,希望能够允许用户从网站上运行服务器上的Java文件。
我希望用户单击一个将在服务器上运行Java文件的按钮,Java程序打印到标准输出的任何内容都将打印在网站上供用户查看。
如何做到这一点(从PHP调用Java程序并将标准从Java文件中实时提供回PHP网站)?
更新
感谢您解答如何从PHP运行Java程序。但是我也希望能够,因为Java程序正在打印到stdout,它将在执行时打印出大量文本,以便能够在网页上打印出来,以便用户可以看到Java程序正在执行中。
如何做到这一点,是否需要任何额外的AJAX或JavaScript或类似的东西?
答案 0 :(得分:47)
PHP exec()
功能是可行的方法,但你应该 非常小心你允许执行的内容......换句话说就是'don' t依赖于用户输入,因为它可能会损害整个服务器。
使用exec调用Java应用程序启动器,您可以从PHP执行任何Java应用程序,例如
<?php exec("java -jar file.jar arguments", $output); ?>
答案 1 :(得分:16)
既然你提到实时我会建议设置PHP到Java Bridge。在每个请求中初始化JVM会占用大量资源。
PHP / Java Bridge是一个 实施流媒体, 基于XML的网络协议,可以 用于连接本机脚本 引擎,例如PHP,Scheme或 Python,带有Java或ECMA 335 虚拟机。它高达50次 通过SOAP比本地RPC更快, 需要更少的资源 网络服务器端。它更快更好 比直接更可靠 通过Java Native进行通信 接口,它不需要 用于调用Java的其他组件 PHP或PHP程序的程序 来自Java。
答案 2 :(得分:5)
我宁愿将Java类包装在Java applet中,然后可以从客户端的javascript调用中调用它:参见http://www.rgagnon.com/javadetails/java-0170.html
否则,如果调用将大量文本抛出到标准输出或由于系统依赖性而必须在服务器上运行类,则从php exec调用是可行的方法,但是您可能需要{ {3}}实时显示客户端上的文本。有各种javascript工具包的实现,如Dojo或jQuery。
对于服务器端,似乎在php cometd中有一个cometd实现。
我希望这会有所帮助......
菲利普
答案 3 :(得分:4)
结帐exec和其他program execution functions。但要小心这个非常,否则它就是利用的秘诀。
答案 4 :(得分:2)
passthru功能是否有用?