Не могу использовать Imagemagick с PDF-файлами из PHP exec (), хорошо из CLI - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь управлять некоторыми PDF-файлами, используя Imagemagick из PHP, используя exec(). Я упростила свой тестовый пример и обнаружила, что, хотя PDF-файлы работают из командной строки, они не работают в PHP.

Из командной строки:

$ identify /var/tmp/doc-98563.png 
/var/tmp/doc-98563.png PNG 2550x3300 2550x3300+0+0 8-bit Gray 256c 1.24178MiB 0.000u 0:00.009

$ identify /var/tmp/doc-35765.pdf
/var/tmp/doc-35765.pdf[0] PDF 419x595 419x595+0+0 16-bit ColorSeparation CMYK 997321B 0.120u 0:00.119
/var/tmp/doc-35765.pdf[1] PDF 419x595 419x595+0+0 16-bit ColorSeparation CMYK 997321B 0.110u 0:00.109

Отлично! Правильно определяет мои файлы, PNG или PDF.

Я также могу подтвердить, что права доступа к файлам просто прекрасны:

$ ls -la /var/tmp/doc*
-rw-r--r--  1 _www  wheel   1.6M 15 May 10:05 /var/tmp/doc-35765.pdf
-rw-r--r--  1 _www  wheel   1.2M 15 May 10:01 /var/tmp/doc-98563.png

Запуск эквивалента из PHP ...

exec('identify /var/tmp/doc-98563.png', $output, $exitcode);
var_dump($output);
var_dump($exitcode);

unset($output);

exec('identify /var/tmp/doc-35765.pdf', $output, $exitcode);
var_dump($output);
var_dump($exitcode);

... дает разные результаты:

array(1) {
    [0]=>
    string(93) "/var/tmp/doc-98563.png PNG 2550x3300 2550x3300+0+0 8-bit Gray 256c 1.24178MiB 0.000u 0:00.000"
}
int(0)
array(0) {
}
int(1)

Так что PNG работает одинаково в обоих местах (как и ожидалось), но PDF просто ... не работает.

Я проверил convert -version и convert -list format на обоих, и оба они идентичны (ImageMagick 7.0.7-32, PDF PDF rw+ Portable Document Format). Я также указал полный путь /usr/local/bin/identify ..., чтобы убедиться, что он точно запускает тот же экземпляр IM. Права доступа к файлам одинаковы для всего, что я вижу в отношении PDF к PNG, так что не думайте, что это так.

Запуск gs Отлично работает с PHP с тем же файлом, но gs не делает то, что мне нужно.

Что-нибудь еще, что я могу попробовать?

Для справки, я на OSX использую PHP7.2, и он, и ImageMagick (и Ghostscript) устанавливаются вместе с Brew.

1 Ответ

0 голосов
/ 15 февраля 2019

Это распространенная проблема. Кажется, что среда PHP обычно не может найти Ghostscript. Один из способов решить эту проблему - отредактировать файл установленного делегата.xml, указав полный путь к ghostscript, т.е., gs, во всех записях для command = "" gs ". Это будет для PDF, PS, EPS. Еще один способ - изменить переменные среды PHP, чтобы включить GS в путь PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...