Я хотел бы запустить что-то вроде (в myProgram.sh):
java -cp whatever.jar com.my.program $1
в PHP и прочитать вывод.
До сих пор у меня есть что-то вроде:
$processOrderCommand = 'bash -c "exec nohup setsid /myProgram.sh ' . $arg1 . ' > /dev/null 2>&1 &"'; exec($processOrderCommand);
Но мне бы очень хотелось, чтобы я смог получить выход из java-программы в PHP-скрипте, а не просто выполнять его как другой поток.
Как это может быть сделано?
Вы можете сделать это :
exec($processOrderCommand, $output);
Из документации:
Если
output
аргумент присутствует, то указанный массив будет заполнен каждой строкой вывода из команды. Пронумерованные пробелы, такие как \ n , не включаются в этот массив. Обратите внимание: если массив уже содержит некоторые элементы, exec () добавит в конец массива. Если вы не хотите, чтобы функция добавляла элементы, вызовите функцию unset () в массиве, прежде чем передать ее в exec () .
Чтобы лучше контролировать выполнение, вы можете взглянуть на proc_open()
Ресурсы :
exec()
proc_open()
Ключ в том, что classpaths должны быть абсолютными в PHP-скрипте shell_exec.
Или, по крайней мере, это единственный способ заставить его правильно работать. В принципе, почти невозможно сказать из среды окружения, что относительный каталог – это то, что php-скрипт запускает JVM.
Кроме того, это помогло установить абсолютное местоположение пути для java, например usr /…/ bin / java