Запуск 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"); } } 

EDIT: Я не мог заставить w0rldart работать. Я действительно могу увидеть что-то, когда я попробую Матье. Я попытался добавить параметр -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. 

ЭТО РАБОТАЕТ: Просто нужно было снять период с

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

Я очень сомневаюсь, что это изменит ситуацию. Но, чтобы быть уверенным, вы попробовали добавить 2> и 1 после своей команды?

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

Я не думаю, что system.out.println использует stderr для отображения своего вывода, но, возможно, стоит попробовать …

Если вы хотите использовать тестовый класс из пакета папок, тогда Test.class необходимо сохранить в папке с именем folder. Тогда вам нужно иметь родительский каталог папки в CLASSPATH.

Поэтому, если ваша конфигурация такова: /rootdir/foo/folder/Test.class вы можете запустить тест следующим образом: java -classpath /rootdir/foo folder.Test .

Я думаю, что такое поведение одинаково, если вы используете java из shell_exec php.