Почему я получаю SegFault, когда я вызываю pdftk из PHP / Apache, но не из PHP / CLI или напрямую - PullRequest
2 голосов
/ 05 октября 2010

Когда я вызываю /usr/local/bin/pdftk из PHP в Apache (через shell_exec(), exec(), system(), и т. Д. ), он возвращает сообщение SYNOPSIS, как и ожидалось.

Когда я звоню /usr/local/bin/pdftk input.pdf fill_form input.fdf output output.pdf flatten через shell_exec(), ничего не возвращается.

Когда я копирую и вставляю точно такую ​​же строку в тот же путь в оболочке (как пользователь apache), файл output.pdf генерируется, как и ожидалось.

Перемещение команды pdftk в сценарий оболочки PHP (shebang #!/usr/bin/php) и ее выполнение с php script.php работает отлично.

Вызов этого сценария оболочки (с перенаправлением его stderr на stdout) из PHP в Apache (через shell_exec(script.php);) приводит к следующей строке:

sh: line 1: 32547 Segmentation fault      /usr/local/bin/pdftk input.pdf fill_form input.fdf output output.pdf flatten 2>&1

Всякий раз, когда я запускаю скрипт из командной строки (через PHP или напрямую), он работает нормально. Всякий раз, когда я запускаю скрипт через PHP через Apache, он либо завершается сбоем без какого-либо уведомления, либо выдает SegFault, указанный выше.

Это PHP 4.3.9 на RHEL4. Пожалуйста, не стреляйте в меня. Я установил память на 512M с помощью ini_set () и убедился, что пользователь apache имел права на чтение / запись для всех путей (с помощью fopen ()) и вошел в систему как apache ...

Просто пошел и проверил / var / log / messages, чтобы найти это:

Oct  4 21:17:58 discovery kernel: audit(1286241478.692:1764638):  
    avc:  denied  { read } for  pid=32627 comm="pdftk" name="zero"
    dev=tmpfs ino=2161 scontext=root:system_r:httpd_sys_script_t
    tcontext=system_u:object_r:zero_device_t tclass=chr_file

ПРИМЕЧАНИЕ: Отключение SELinux "устранило" проблему. Это перешло в вопрос ServerFault? Кто-нибудь может дать мне 30-секундный учебник по контролю доступа SELinux?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2011

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

Сбой выполнения PDFTk из PHP-скрипта с кодом ошибки 11

0 голосов
/ 05 октября 2010

php-cli & php-cgi (или модуль, зависит от того, что использует ваш сервер) - это разные двоичные файлы.Им даже не нужно делиться одной и той же версией, чтобы счастливо жить бок о бок на вашем сервере.Они также могут не использовать одну и ту же конфигурацию.Увеличение памяти обычно не помогает Сегфаултсу.Точки для проверки:

  1. Это одна и та же версия?
  2. Имеют ли они одинаковые настройки (обратитесь к расположению * .ini, загруженному в вывод phpinfo();, и, возможно, ко всему выводу), если нет: попробуйте, что произойдет, если вы измените тот, для своего веб-сервера, наодин для максимально возможного.
  3. Сегфопы встречаются чаще в расширениях, чем в ядре afaik, и иногда кажутся несвязанными.Попробуйте отключить ненужные расширения один за другим, чтобы увидеть, исчезнет ли проблема.
  4. Все еще не удалось?Возможно, вы захотите запустить apache с gdb, но у меня нет с этим опыта, он может вам кое-что сказать.
  5. Не повезло?Перекомпилируйте любой модуль cgi, который использует ваш веб-сервер.

Это PHP 4.3.9 на RHEL4.Пожалуйста, не стреляйте в меня.

Мне грустнее вас, чем злости, мы за отметкой 5,3, подойди, здесь намного веселее.

...