Ошибки ImageMagick: чтение PDF
Я нахожусь на Win Server 2012 IIS 8, PHP 5.6, Imagick Module 3.1.2, ImageMagick 6.8.7-2 2013-10-18 Q16.
Я прочитал все ошибки, возникшие у делегата Postscript, и сделал следующее: - Установлен GhostScript - Проверено, что GS и Imagick находятся в переменной PATH - Проверено, что я могу использовать конвертирование в командной строке (Работает) - PHP exec("whoami") возвращает nt полномочия \ iusr, которые я добавил для полного контроля - я пытался использовать полные пути backslashes () double-backslashes (\) foward-slashes (/) - я не думаю, что это имеет какое-либо отношение к пути, потому что если я попробую тот же код на JPG без пути, он работает. Скрипт и файлы находятся по одному пути.
Вот мой PHP-код:
<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(E_ALL);
echo exec("whoami"); echo "<br/>";
echo exec("convert.exe dr.pdf dr.jpg 2>&1"); // Does not work and gives below error
echo "<br/>";
$im = new imagick();
$im->readimage("dr.pdf");
$pages = $im->getNumberImages();
echo $pages;
?>
Выход:
nt полномочия \iusr convert.exe: изображения не определены `dr.jpg' @ error/convert.c/ConvertImageCommand/3145.
Неустранимая ошибка: необработанное исключение "ImagickException" с сообщением "Сбой делегата Postscript". Dr.pdf: нет такого файла или каталога @ error/pdf.c/ReadPDFImage/682 в D:\WWW\DEMO\data\temp\test.php:13 трассировки стека: #0 D:\WWW\DEMO\data\temp\test.php(13): Imagick->readimage('dr.pdf') #1 {main}, брошенный в D: \ WWW \ DEMO \ data \ temp \ test.php в строке 13
Любая помощь будет принята с благодарностью. С уважением, Йохан
1 ответ
Всем, кто может столкнуться с той же проблемой: Измените разрешения C:\Windows\Temp, чтобы включить Полный доступ для IIS_IUSRS и пользователей.
После того, как я это сделал, кажется, все работает!
Примечание. Мне пришлось обновить систему до последней версии модуля PECL Imagick, чтобы увидеть полную ошибку, возвращаемую GhostScript, которая показала, что GhostScript пытается выполнить преобразование в папке Windows Temp. Было странно, что мой php-скрипт работал из командной строки, а не с веб-сайта. Но, очевидно, это была проблема с разрешением.
Я публикую следующие шаги по установке для тех, кто сталкивается с той же проблемой (или, если мне нужно руководство в будущем, и я забыл:)) На Windows 2012 Server с IIS 8
- Установите установщик Win Platform (https://www.microsoft.com/web/downloads/platform.aspx)
- Перейдите в диспетчер IIS, откройте установщик веб-платформы и установите PHP 5.6.
- Загрузите установочную библиотеку ImageMagick x86 отсюда: http://www.imagemagick.org/download/binaries/ImageMagick-6.9.1-9-Q16-x86-dll.exe
- Установите ImageMagick и убедитесь, что в $_SERVER["Path"] настроен путь ImageMagick.
- Загрузите последний PHP-модуль PECL ImageMagick x86 NonThreadSafe здесь: http://windows.php.net/downloads/pecl/releases/imagick/3.3.0RC2/php_imagick-3.3.0rc2-5.6-nts-vc11-x86.zip
- Скопируйте все файлы DLL PECL ImageMagick в PHP \ ext
- Добавить расширение = php_imagick.dll в ваш файл php.ini
- Загрузите и установите GhostScript x64 здесь: http: //downloads.ghostscript.com/public/gs916w64.exe (не x86, поскольку ImageMagick делегирует 64-битный GhostScript)
- Убедитесь, что путь GhostScript находится в переменной $_SERVER["Path"] (C:\Program Files\gs\gs9.16\bin)
- ВАЖНО ПОСЛЕДНИЙ ШАГ: Добавьте права пользователя в C:\Windows\Temp для IIS_USRS и пользователей
- Перезапустите сервер (обычно требуется, чтобы PHP видел пути)
Что мне всегда помогало, так это тестирование моего самого основного скрипта через командную строку> php.exe test.php. Это почти всегда будет показывать вам ошибки, если вы что-то сделали не так с установкой или если вам нужен VC Redist. Где запрос веб-сайта не всегда показывает ошибки при запуске.