Я пытаюсь управлять некоторыми 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.