Невозможно выполнить java-программу с помощью функции php exec

Я пытаюсь выполнить java-программу, чтобы подписать файл pdf с функцией php exec, но не работает:

exec('java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return); 

Когда я его выполняю, $ output – пустой массив, а $ return – int (1), но если я запускаю:

 java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD 

В командной строке это работает. Может кто-нибудь мне помочь?

Спасибо.

@Treffynnon прав. Разница между выполнением программы из командной строки и другой программой – это переменные среды и разрешения.

Итак, сначала проверьте, имеет ли пользователь, который запускает ваш сервер, на котором работает PHP, разрешения для запуска приложения и доступа к соответствующим файлам.

Затем проверьте путь к

  1. Ява
  2. PROGRAM.jar
  3. ORIGIN.pdf
  4. DESTINY.pdf

Вероятно, вы должны изменить путь, т. Е. Лучше указать его либо с использованием относительной, либо абсолютной нотации. Это связано с тем, что текущий рабочий каталог может отличаться в двух случаях.

Удачи.

Почти наверняка PHP не будет знать путь «java». Если вы находитесь в Linux, запустите «which java» и поместите весь путь Java, который вы вернетесь в вызов exec, например

 exec( '/usr/bin/java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return); 

Наконец, я смог решить проблему.

Решение:

 exec('java -Djava.awt.headless=true -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return); 

Добавив параметр -Djava.awt.headless=true вы говорите Java, что это косвенный вызов, поэтому он не контролирует клавиатуру, мышь и т. Д.