Моему веб-сайту нужен PHP для запуска программы Java в фоновом режиме. Итак, PHP выдает метод exec()
, чтобы позволить Java сделать всю работу. Реализация отлично работает в Windows, но полностью провалилась в Ubuntu. Хотя exec()
не работает, автономный тест с консолью работает нормально.
Я установил test.php
, чтобы сузить проблему:
<?php
$output = exec("java -cp ~/path/to/java/class/file/folder Hello 2>&1");
//$output = exec("whoami");
echo $output;
?>
Hello.java
это просто:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Запустив test.php
на локальном хосте, он показывает:
Error: Could not find or load main class Hello
Я попытался сузить причину ошибки, и моя мысль была такой:
exec()
сама по себе проблематична:
маловероятно, так какwhoami
выводит apache-user, как и ожидалось.- что означает сообщение об ошибке:
Я искал информацию об этой ошибке. Сообщение вроде этого говорит о том, что это вызвано < strong>отсутствие пути к классам. Это не относится ко мне, потому что в консоли это работает. Значит, сообщение об ошибке ничего не значит (не так ли?) - разрешение пользователя/группы:
Возможно ли, что пользователю apache не разрешено запускать файл класса?
Я проверил и обнаружил, что код разрешенияHello.class
равенrw-r--r--
, владельцем которого являетсяapache-user:webmasters
.
Но даже если ни у кого нет прав доступаx
к файлу, я все равно могу запустить его в консоли (под своим собственным пользователем).
Я не уверен в ситуации здесь. Но я так понимаю, что при запуске java-программы на самом деле онаJVM
выполняется (или что-то еще); поэтому разрешениеHello.class
не имеет значения.
Я нашел еще один сообщение похожая ситуация. Но его решение - указание полного пути к Java bin/usr/bin/java
- у меня не работает...
Что вызывает ошибку?
Кто-нибудь может помочь? Подробное решение приветствуется! Я новичок @_@
Большое спасибо!!!