从网站上的PHP脚本运行Java类文件
我有一个网站,并希望能够允许用户在网站上运行服务器上的Java文件。
我希望用户点击一个button,它将在服务器上运行Java文件,而Java程序打印到标准的任何内容都将打印在网站上供用户查看。
如何做到这一点(从PHP调用Java程序,并将标准从Java文件实时返回到PHP网站)?
更新:
感谢有关如何从PHP运行Java程序的答案。 不过,我也希望能够,因为Java程序正在打印到标准输出,它将在执行时打印出大量的文本,以便能够在网页上打印出来,以便用户可以看到什么阶段Java程序正在执行中。
如何做到这一点,它需要任何额外的AJAX或JavaScript或类似的东西?
PHP的exec()
函数是要走的路,但是你应该非常小心你允许执行的内容。换句话说,不要依赖于用户input,因为它可能会危害整个服务器。
使用exec调用Java应用程序启动器,可以执行PHP中的任何Java应用程序,例如
<?php exec("java -jar file.jar arguments", $output); ?>
既然你提到实时,我会build议设置一个PHP的Java桥梁。 在每个请求初始化JVM占用大量资源。
PHP / Java桥梁
PHP / Java Bridge是基于XML的stream式networking协议的实现,可用于将本机脚本引擎(例如PHP,Scheme或Python)与Java或ECMA 335虚拟机连接起来。 它比本地的RPC通过SOAP快50倍,在networking服务器端需要更less的资源。 它比通过Java本地接口的直接通信更快,更可靠,并且不需要额外的组件来从Java的PHP或PHP程序中调用Java过程。
检查exec和其他程序执行function 。 但是要非常小心地做,或者这是一个攻击的秘诀。
我宁愿将Java类包装在Java applet中,然后可以从客户端的javascript调用中调用它:请参阅http://www.rgagnon.com/javadetails/java-0170.html
否则,如果调用向标准输出抛出大量文本,或者由于系统依赖关系,类必须在服务器上运行,则从php exec调用是一种方式,但是您可能需要类似cometd的东西来显示客户端上的文字实时。 有各种JavaScript工具包,如Dojo或jQuery的实现。
对于服务器端来说,这里似乎有一个PHP的cometd实现。
我希望这有帮助…
菲利普
任何用途的passthrufunction?