从PHP运行Java文件

时间:2012-02-25 20:18:37

标签: java php

我在问题上找到了其他几个问题,但解决方案无效。我在本地服务器上有一个网页,您可以为整个java类输入文本。单击提交时,我希望显示输出。使用shell_exec我可以编译java文件。但是,当我尝试运行它时,我什么都没得到。

shell_exec("javac /folder/Test.java"); // works
echo shell_exec("/usr/bin/java folder.Test"); // nothing is returned

当我读到它解决了其他人的问题时,我决定使用java的完整路径。我跑的时候:

/usr/bin/java folder.Test

从命令行开始工作。

Test.java文件如下所示:

package folder;
public class Test{
 public static void main(String[] args){
  System.out.println("testing");
 }
}
编辑:我无法让w0rldart工作。当我尝试Mathieu时,我实际上可以看到一些东西。我尝试添加-classpath选项(我不确定我是否正确使用它)

echo shell_exec("java -classpath ./folder/ Test 2>&1");

我得到与没有-classpath相同的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: Test Caused by: 
java.lang.ClassNotFoundException: Test at  
java.net.URLClassLoader$1.run(URLClassLoader.java:217) at 
java.security.AccessController.doPrivileged(Native Method) at 
java.net.URLClassLoader.findClass(URLClassLoader.java:205) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:321) at 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: 
Test. Program will exit. 

IT工作: 只需从

中删除期限
echo shell_exec("java -classpath ./folder/ Test 2>&1"); //error
echo shell_exec("java -classpath /folder/ Test 2>&1"); //works

2 个答案:

答案 0 :(得分:3)

我很不确定这会有所作为。但只是为了确定,您是否尝试在命令后添加2>& 1?

echo shell_exec("/usr/bin/java folder.Test 2>&1");

我不认为system.out.println正在使用stderr来显示其输出,但无论如何它可能值得尝试......

答案 1 :(得分:1)

如果要使用文件夹包中的Test类,则需要将Test.class保存在名为folder的文件夹中。然后你需要在CLASSPATH上有文件夹的父目录。

因此,如果您的配置如下:/rootdir/foo/folder/Test.class,那么您可以像这样开始测试:java -classpath /rootdir/foo folder.Test

我认为如果你使用php的shell_exec中的java,这种行为是一样的。