2012-02-27 3 views
5

Я пытаюсь выполнить программу Java, чтобы подписать PDF-файл с помощью функции PHP ехеса но не работаю:Невозможно выполнить программу Java с помощью функции PHP ехеса

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

Когда я исполню его, $ выход является пустым массивом и $ возврата является Int (1), но если я бег:

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

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

спасибо.

+3

ли работа, если вам предоставить полный путь к java-бинарнику? Например, '/ usr/bin/java'. Используйте 'which java', чтобы найти путь к двоичному. – Treffynnon

+1

В дополнение к комментарию @Treffynoon вам также может потребоваться указать полный путь к вашим файлам PROGRAM.jar, ORIGIN.pdf и DESTINY.pdf. –

+0

Я просто использую полный путь для файлов и команд и не работает. – josebailo

ответ

1

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

Решение:

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

+0

привет, это не работает для меня, я пробовал приведенный выше код, я все равно получаю пустой массив для результата –

3

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

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

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

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

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

Удачи.

2

Почти наверняка 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); 
Смежные вопросы