Выполнение PDFTk из скрипта PHP не выполняется с кодом ошибки 11 - PullRequest
0 голосов
/ 10 августа 2010

Я пытаюсь заполнить PDF из PHP-скрипта. Я следую за статьей Сид Стюард по следующему URL .

Я настроил PDFTk пакет для CentOS linux дистрибутива, и я могу выполнить pdftk из командной строки, он объединяет форму FDF с PDF и успешно генерирует сплющенный (Заполнено) PDF. Я использую следующую команду для проверки Pdftk с помощью оболочки.

pdftk /tmp/form.pdf fill_form /tmp/fdfbm0pe7 output /tmp/filledform.pdf flatten

Но при попытке выполнить подобную команду через PHP я получаю сообщение об ошибке. Команда passthru не выполняется с кодом ошибки 11 . Ниже приведен код php, который я использую для выполнения команды:

$command = 'pdftk form.pdf fill_form '. $fdf_fn. ' output - flatten';
passthru($command, $error);

$ fdf_fn выше имеет имя файла FDF. form.pdf - это заполняемая PDF-форма. И form.pdf , и файл сценария PHP, из которого я дал приведенные выше строки кода, находятся в одной папке. Я проверил, что PDFtk работает правильно через PHP, повторив shell_exec ('pdftk') , и он возвращал стандартную справочную информацию.

Просто для получения более подробной информации, путь к pdftk - / usr / bin / , а файлы PHP-скриптов и PDF-форм находятся в / var / www / html / pdfmerge .

Может кто-нибудь подсказать, что я делаю неправильно, что выполнение команды через PHP не выполняется с кодом ошибки 11?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

У меня была точно такая же проблема с PHP, работающим с PDFTK на CentOS, и я потратил несколько часов на то, чтобы разобраться, поэтому я надеюсь, что кто-то найдет это полезным.Я специально использую PDFTK для модуля FillPDF на Drupal.Решением проблемы кода выхода 11 была установка модуля локальной политики, позволяющего httpd запускать PDFTK.Если вы выполните grep /var/log/audit/audit.log для pdftk, как это

grep -i pdftk /var/log/audit/audit.log

, вы должны увидеть некоторые ошибки, вероятно, одну для execmem, среди прочих.Вот что я сделал, чтобы исправить проблему ...

Выполнение этой команды извлечет ошибки из журнала и поместит их в файл для просмотра.

grep -i pdftk /var/log/audit/audit.log | audit2allow -m pdftklocal > pdftklocal.te

Есливыходные данные выглядят хорошо (например, есть выходные данные IS), выполните эту команду для создания модуля.

grep -i pdftk /var/log/audit/audit.log | audit2allow -M pdftklocal

После создания модуля вы активируете политику, выполнив эту команду.

/usr/sbin/semodule -i pdftklocal.pp

PDFTK теперь должен запускаться из PHP.Если это не так, проверьте, включен ли httpd_enable_cgi, запустив

getsebool httpd_enable_cgi

. Если он не включен, включите его, запустив

setsebool -P httpd_enable_cgi 1

.найдено здесь: http://wiki.centos.org/HowTos/SELinux#head-faa96b3fdd922004cdb988c1989e56191c257c01

0 голосов
/ 08 сентября 2010

У меня была проблема, аналогичная вашей, и оказалось, что PHP не имел доступа для чтения .pdf, .fdf и не имел доступа для создания сплющенного файла .pdf в каталоге / tmp.

, чтобы увидеть, если это проблема, попробуйте сделать

chmod 777 /tmp

, чтобы увидеть, если это решит проблему.Я бы не рекомендовал уходить на 777, но, возможно, перенести его обратно на 700 или около того.

...