如何在php脚本中执行Java程序?
我正在写一个简单的网页上传脚本。 目标是使用php上传一个文件,然后调用java程序来处理该文件。如何在php脚本中执行Java程序?,java,php,Java,Php,我正在写一个简单的网页上传脚本。 目标是使用php上传一个文件,然后调用java程序来处理该文件。 我已经完成了上传文件的工作,但无法从php脚本中成功运行java程序。 我尝试了exec(),shell\u exec(),和system(),但没有结果。 对于命令,我使用了“java Test”、“java/Test”、“/usr/bin/java/Test”,我甚至将应用程序设置为一个没有结果的jar文件。我实际使用的代码行是: echo shell_exec("java Test");
我已经完成了上传文件的工作,但无法从php脚本中成功运行java程序。
我尝试了
exec()
,shell\u exec()
,和system()
,但没有结果。对于命令,我使用了“
java Test
”、“java/Test
”、“/usr/bin/java/Test
”,我甚至将应用程序设置为一个没有结果的jar文件。我实际使用的代码行是:
echo shell_exec("java Test");
通常没有输出。但是,如果我刚刚使用了shell_exec(“java”)
,则会显示来自java的帮助的最后一行(“代码>显示具有指定图像的启动屏幕”),这表明命令已执行。例如,如果我使用shell\u exec(“whoami”)
返回“nobody”,这是正确的。java文件所做的唯一一件事就是创建一个文件,这样我就可以看到应用程序已经成功运行(如果我在命令行上运行它,应用程序就会成功运行)。我已将java文件的权限设置为777,以排除任何可能的权限错误。我已经为此挣扎了一段时间,尝试了各种各样的选项,但没有结果-文件从未创建(文件是用绝对路径创建的,所以它没有被创建,我就是找不到文件)。有人有什么想法吗
谢谢。我真的不知道,但我来了一个跨PHP-JAVA的桥,也许它能帮上忙 更新: 我用Jasper Reports对此进行了测试,效果非常好。它允许您使用PHP扩展Java类,或者像使用PHP一样使用Java类
use java\lang\String as JString;
require_once("javabridge/java/Java.inc");
class String extends JString {
function toString () {
return "hello " . parent::toString();
}
}
$str = new String("Java");
echo $str->toString();
或
更多示例:这可能与exec默认使用的路径有关。调用java时,可能需要使用.class或jar文件的绝对路径显式定义类路径 我已经为此奋斗了一段时间 在尝试各种选择的同时 无结果-从未创建该文件 (该文件是使用绝对值创建的。) 所以它没有被创建,我 就是找不到文件)。有人吗 你有什么想法吗 我认为问题在于。Apache以“nobody”组(Apache用户)的形式运行,该组将执行java脚本,该脚本将尝试在光盘上的某个位置创建文件。我想它没有权限写到那个位置。您应该浏览该文件夹,以便apache用户可以写入该文件夹 == 首先,我想向您指出,从脚本调用exec()可能会导致服务器崩溃。我建议您改用redis(见下文)之类的工具 == 第二,我想我知道问题是什么。您应该首先尝试运行下面的简单示例,该示例对我很有用 == 首先确保权限设置正确。因为apache在大多数情况下都是以无人身份运行的 我自己在ubuntu上用repo安装的php做了这个简单的测试 test.java
class test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
test.php
echo exec('java test');
运行test.php
$ php test.php
Hello World!
==
或者,您可以尝试以下一种解决方案(哪种方案更好):
前几天看到了这一点:您的java类是否在一个包中?如果是这样,您需要指定包,并且您的目录结构应该反映包。换句话说,如果您在同一目录下的命令行,您可以使用同一行手动运行java类吗?不,java类不在包中,我已经在命令行上测试了该命令,它在那里成功运行。我想到了这一点,并试图在我的帖子中通过使用“/usr/bin/java$ php test.php
Hello World!
<?php
$PATH="C:\Program Files\Java\jdk1.7.0_09\bin";
echo exec("javac theNameOfYourJavaProgram.java 2>&1");//shows # of errors
echo "<br />";
echo exec("java theNameOfYourJavaProgram 2>&1");//this line executes it
echo "<br />";
echo shell_exec("javac theNameOfYourJavaProgram.java 2>&1 ");//compiles it
?>