2010-11-12 3 views
0

Я использую pdftk для конкатенации файлов PDF на лету, сделав Exec() вызов так:PDFTK вызывается через Exec() не беззвучно

exec("/path/to/pdftk /path/to/file1.pdf /path/to/file2.pdf cat output path/to/output.pdf", $execoutput); 

Это все прекрасно работает в среде Linux, но при локальном запуске в наших средах разработки (сочетание Windows/Uniform Server и OSX/MAMP) это, похоже, бесшумно. $ execoutput - пустой массив.

Если команда, отправленная в exec(), копируется и вставляется в командную строку либо в Windows, либо в OSX, у нее есть нужный результат, и создается конкатенированный файл. На каждой машине разработчика установлен pdftk, и можно продемонстрировать, что он полностью функциональен из командной строки.

В настоящее время я в тупике. Я затрудняюсь объяснить, почему это происходит.

ответ

5

В конечном итоге я понял, что происходит. Как noob, я предположил, что на каждой машине работает последняя версия pdftk. Они не были.

Казалось бы, что описанная выше проблема относится к известной ошибке, которая была зафиксирована в версии 1.43

От http://www.pdflabs.com/docs/pdftk-version-history/

«Clear маски сигнала в качестве временного решения для сред, выключить сигналы перед вызовом pdftk. Известно, что эта проблема вызывает зависание pdftk в некоторых веб-настройках Python, а также в PHP ».

Guess, которая была единственной установка будет запущена версией> = 1,43 ;-)

Обновления каждой среды разработки до последней версии Pdftk (в настоящее время 1,44) решили проблему

1

Это также может возникать, если у pdftk нет разрешения на добавление вывода в нужную папку. Это можно увидеть, если вы распечатаете $ execoutput (с «verbose» в команде) и увидите, что последняя запись будет «Create Output». Следующая строка должна сказать, что вывод выполняется, но он просто закончится. Это застало меня на некоторое время (так как это работает, если вы запускаете прямо в командной строке).

Смежные вопросы