Задача: настроить поддержку ImageMagick в PHP 5.5.3, установленном на локальном компьютере под управлением WIn7 x64.
Решение:
На самом деле, все довольно просто, но без знания некоторых нюансов с первого раза может не получиться.
Итак, во-первых, запускаем phpInfo() и обращаем внимание вот на эти поля:
- "Architecture" ("x86", или "x64"?);
- "Thread Safety" ("enabled", или нет?).
Теперь
скачиваем сам ImageMagick и ставим его себе. Здесь важно скачать дистрибутив именно той "архитектуры", что и установленный PHP ("x86" или "x64"): x64 версия ImageMagick, установленная на Win7 x64, работать не будет, если PHP установлен x86 (вроде логично, но сам каждый раз забывал обратить на это внимание). В остальном, если PHP был установлен через что-то вроде XAMPP, то нужна версия с "dll" и "Q16" в названии.
После установки скачиваем
imagick PECL extension для своей версии PHP. Тут опять важно выбрать ту же "архитектуру" ("x86" или "x64") и "thread safe" ("Thread Safe" или "Non Thread Safe"), что и у установленного PHP. Из скаченного архива файл "php_imagick.dll" копируем в поддиректорию "ext" той директории, где находятся файлы самого PHP.
Затем открываем phpInfo() ещё раз и:
a) проверяем, чтобы путь к директории с ImageMagick присутствует в поле "Path";
b) находим, где лежит php.ini (поле "Loaded Configuration File").
Открываем php.ini на редактирование, находим раздел "Dynamic Extensions" и среди других строк этого раздела добавляем такую строку: extension=php_imagick.dll
Теперь перезапускаем веб-сервер и проверяем phpInfo() ещё раз, чтобы убедиться, что там появилась новая секция "imagick".
ВАЖНОЕ ДОПОЛНЕНИЕ
Как оказалось, указанного выше недостаточно. Расширение php_imagick.dll использует в своей работе ряд других dll (CORE_RL_*.dll), которые должны лежать в директории, путь к которой прописан в Path. Можно попробовать использовать эти dll из архива, скаченного из PECL, но лучше найти версию ImageMagick, которая сразу идет с этими файлами. Кроме того, нужно искать именно ту версию (например, ImageMagick-6.8.7-3-Q16-x86-dll.exe), в которой есть CORE_RL_jpeg_.dll, иначе в PHP не будет поддержки jpeg файлов (в PECL этой dll нет).