Я отправляю этот ответ, потому что мой интерфейс администратора Virtualmin / Webmin решил, что было бы неплохо отключить мой PHP-движок. Я нашел время, чтобы найти решение, поэтому я решил поделиться с ним вы, ребята:
Также не забудьте проверить, что ни один из ваших конфигурационных файлов вашего сайта, связанных с этим конкретным хостом или виртуальным хостом, не имеет в них php_admin_value, которые отключают PHP, например:
php_admin_value engine Off
В случае сомнений прокомментируйте это ...
# php_admin_value engine Off
И перезагрузите свой веб-сервер.
Посмотрите на ProcessBuilder
. После того, как вы настроили ProcessBuilder
и выполнили start
, у вас будет дескриптор Process
, на который вы можете подать вход и прочитать вывод.
Вот фрагмент, который поможет вам начать :
ProcessBuilder pb = new ProcessBuilder("/bin/bash");
Process proc = pb.start();
// Start reading from the program
final Scanner in = new Scanner(proc.getInputStream());
new Thread() {
public void run() {
while (in.hasNextLine())
System.out.println(in.nextLine());
}
}.start();
// Write a few commands to the program.
PrintWriter out = new PrintWriter(proc.getOutputStream());
out.println("touch hello1");
out.flush();
out.println("touch hello2");
out.flush();
out.println("ls -la hel*");
out.flush();
out.close();
Выход:
-rw-r--r-- 1 aioobe aioobe 0 2011-04-08 08:29 hello1
-rw-r--r-- 1 aioobe aioobe 0 2011-04-08 08:29 hello2
Я думаю, вы найдете Javadoc для класса java.lang.Process полезным. Следует отметить, что вы можете получать входные и выходные потоки из процесса для связи с ним во время его работы.
Я отвечу на вопрос об использовании ProcessBuilder
. Если вы хотите узнать более подробную информацию об этом и почему вы должны предпочесть его Runtime.exec()
, см. Эту запись в глоссарии Java . Он также показывает, как использовать потоки для связи с внешним процессом.
Вы можете запустить внешнее приложение с помощью Runtime.getRuntime (). exec (...)
Чтобы отправить данные во внешнюю программу, вы можете либо отправить данные в выходной поток Processes (вы получаете объект процесса обратно из exec), или вы можете открывать сокеты и сообщать об этом.