Невозможно выполнить Java-программу с функцией php exec - PullRequest
5 голосов
/ 27 февраля 2012

Я пытаюсь выполнить программу 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

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

Спасибо.

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

@ Треффиннон права. Разница между выполнением программы из командной строки и другой программой заключается в переменных среды и разрешениях.

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

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

  1. Java
  2. PROGRAM.jar
  3. ORIGIN.pdf
  4. DESTINY.pdf

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

Удачи.

2 голосов
/ 27 февраля 2012

Почти наверняка 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);
1 голос
/ 13 марта 2012

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

Решение:

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, что это косвенный вызов, поэтому он не контролирует клавиатуру, мышь и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...