Как запустить Java-программу и получить выход на PHP?

Я хотел бы запустить что-то вроде (в 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()


Ресурсы :

  • php.net – exec()
  • php.net – proc_open()

Ключ в том, что classpaths должны быть абсолютными в PHP-скрипте shell_exec.

Или, по крайней мере, это единственный способ заставить его правильно работать. В принципе, почти невозможно сказать из среды окружения, что относительный каталог – это то, что php-скрипт запускает JVM.

Кроме того, это помогло установить абсолютное местоположение пути для java, например usr /…/ bin / java