Я пытаюсь выполнить 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, разрешения для запуска приложения и доступа к соответствующим файлам.
Затем проверьте путь к
Вероятно, вы должны изменить путь, т. Е. Лучше указать его либо с использованием относительной, либо абсолютной нотации. Это связано с тем, что текущий рабочий каталог может отличаться в двух случаях.
Удачи.
Почти наверняка 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, что это косвенный вызов, поэтому он не контролирует клавиатуру, мышь и т. Д.