Вопрос по php, imagick, imagemagick, pdf, ghostscript – Проблема с Imagick, а также с phmagick: сбой делегата Postscript / Нет такого файла или каталога

7

Я использую imagick 3.0.1, а также phmagick (http://www.francodacosta.com/phMagick/download). Независимо от того, что и то, и другое выдают мне одинаковую ошибку, когда я пытаюсь конвертировать PDF в JPEG.

Например: Postscript delegate failed `/tmp/magick-bfxIrUJ5': No such file or directory @ error/pdf.c/ReadPDFImage/669

Я использую Ghostcript-9.05 (работает в / usr / local / bin / gs). Также ImageMagick-6.7.6-8 (работает в / usr / local / bin / convert).

Я уже проверил разрешение папки (755). ImageMagick прекрасно работает из терминала.

Например, мой PHP с использованием Imagick:

<code>//use imagick
$im = new imagick( '/pdf/553571072.pdf' );

// convert to jpg
$im->setImageColorspace(255);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setImageFormat('jpeg');

//write image on server
$im->writeImage('/jpg/553571072.jpg');
</code>

Кстати, Imagick обнаруживается в моем phpinfo (). Я работаю над linux / apache / amd64.

Любой совет будет высоко оценен!

нормально работать из терминала не имеет значения. Вы тогда не работаете под UID Apache, так что это недействительный тест. Marc B
Halfer, код взят из веб-приложения, я также попытался использовать полный путь / var / vhost /...../ pdf / & ;, то же самое для jpg. Папки находятся в базе, так же, как / css и / js. Марк, я не понимаю вашу точку зрения, я запускаю веб-приложение на VPS. Спасибо, парни. Diego Sarmiento
Ваш пример кода из веб-приложения или из командной строки? И вы действительно читаете из папки & apos; / pdf & apos; и запись в папку «/ jpg»; то есть они оба в корне системы регистрации? halfer

Ваш Ответ

3   ответа
1

Я получал эти проблемы, используяImageMagick ImageMagick 6.7.7-10 сGhostScript 9.10.

Оказывается, что файлы PDF были повреждены, и хотя некоторые более новые версии GS могли читать их, эта более старая версия не могла, учитывая следующую ошибку.

   **** Warning:  An error occurred while reading an XREF table.
   **** The file has been damaged.  This may have been caused
   **** by a problem while converting or transfering the file.
   **** Ghostscript will attempt to recover the data.

Под Linux вы можете передавать PDF черезpdftk первый:

pdftk 'bad.pdf' output 'fixed.pdf'

После этого у меня все работало на Ubuntu.

5

Мой вклад в «чистое решение PHP» предложенный @HelloWorld(thank you!) в комментариях к принятому ответу небольшое исправление: надоadd the variable name перед расширением PATH по умолчанию, так
putenv( getenv('PATH') . ':/usr/local/bin' ); не будет работать, но
putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' ); будут

*I have less than 50 points of reputation, couldn't add my comment at the right place, so i had to create a new answer :-)

16

Хорошо, это наконец работает, благодаря помощи Нуно Франко да Коста (http://www.francodacosta.com/).

Проблема была в том, что мой путь к GhostScript был в порядке для Shell, но он был неправильным для System и PHP. Чтобы исправить это, вы должны связать свой/usr/local/bin/gs подать в/usr/bin/gs.

Do the following from the Shell:

[[email protected] ~]# convert -list configure | grep -i delegates
DELEGATES     bzlib fontconfig freetype jpeg jng png tiff x11 xml zlib

Проверьте, еслиgs файл уже существует в/usr/bin, Если это произойдет, мы создадим его резервную копию.
If there is no /usr/bin/gs you can skip this step

[[email protected] ~]# ls -l /usr/bin/gs
-rwxr-xr-x 1 root root 6024 Sep 30  2010 /usr/bin/gs
[[email protected] ~]# mv /usr/bin/gs /usr/bin/gs.orig

Now create the link from /usr/local/bin/gs to /usr/bin/gs

[[email protected] ~]# sudo ln -s /usr/local/bin/gs /usr/bin

Это должно решить проблему. Большое спасибо, ребята.

Это решает проблему и для меня ... но невозможно указать php-imagick, где находится исполняемый файл gs?
Я только что пришел через этот ответ. Есть простое решение. Просто добавьте фактический путь "gs" к php PATH: putenv (getenv («PATH»). «/ usr / local / bin»)

Похожие вопросы