Если ваш сайт или веб-приложение работает с изображениями — создаёт миниатюры, конвертирует форматы, обрабатывает загрузку файлов или генерирует PDF-превью — то расширение PHP Imagick вам жизненно необходимо. Без него многие функции обработки изображений будут недоступны, а скрипты — выдавать ошибки.
В этом руководстве мы установим PHP-Imagick на Debian двумя способами: стандартным (из официальных репозиториев Debian) и продвинутым (из репозитория Sury, если вам нужна конкретная версия PHP). Я подробно разберу каждую команду и научу вас диагностировать и решать типичные проблемы.
Предварительные требования
Перед установкой убедитесь, что:
- У вас установлен PHP (любой версии). Если нет — сначала установите PHP на Debian.
- На сервере настроен веб-сервер (Apache или Nginx) с PHP-FPM или модулем
libapache2-mod-php.
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.
✅ Ожидаемый вывод в терминале:
root
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
Способ 1: Установка PHP-Imagick из официальных репозиториев Debian (рекомендуемый)
Этот способ подходит для большинства серверов. Вы получите расширение, совместимое с версией PHP, которая идёт в вашем релизе Debian по умолчанию.
| Релиз Debian | Версия PHP по умолчанию | Пакет расширения |
|---|---|---|
| Debian 13 (Trixie) | PHP 8.4 | php-imagick (устанавливает php8.4-imagick) |
| Debian 12 (Bookworm) | PHP 8.2 | php-imagick (устанавливает php8.2-imagick) |
| Debian 11 (Bullseye) | PHP 7.4 | php-imagick |
Шаг 1: Обновите список пакетов и систему
sudo apt update && sudo apt upgrade -y
Что делает:
sudo— права суперпользователяapt update— обновляет список доступных пакетов из репозиториев&&— выполняет следующую команду только если предыдущая завершилась успешноapt upgrade -y— обновляет все установленные пакеты до свежих версий,-yавтоматически подтверждает обновление
Зачем: Это стандартная практика безопасности перед установкой нового ПО. Вы получаете актуальные версии пакетов и избегаете конфликтов зависимостей.
Шаг 2: Установите PHP-Imagick
sudo apt install php-imagick
Что делает: Устанавливает пакет php-imagick и все необходимые зависимости (библиотеки ImageMagick, дополнительные PHP-пакеты).
Ожидаемый вывод в терминале (пример для Debian 13):
The following NEW packages will be installed:
php-common php-imagick php8.4-cli php8.4-common php8.4-imagick
php8.4-opcache php8.4-phpdbg php8.4-readline
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
На Debian 12 вместо php8.4-* будут пакеты php8.2-*, на Debian 11 — php7.4-*.
Шаг 3: Проверьте, что расширение загружено для командной строки (CLI)
php -m | grep -x imagick
Что делает:
php -m— показывает список всех загруженных модулей PHP|(вертикальная черта) — передаёт вывод первой команды на вход второйgrep -x imagick— ищет точное совпадение со словомimagick(флаг-xтребует полного совпадения строки)
✅ Ожидаемый вывод в терминале:
imagick
Если вы видите imagick — расширение успешно загружено для PHP CLI.
Способ 2: Установка версии PHP-Imagick для конкретной ветки PHP (из репозитория Sury)
Этот способ нужен, если:
- Вы используете PHP версии, отличной от той, что идёт в Debian по умолчанию (например, PHP 8.3 на Debian 12).
- Вы уже подключили репозиторий Sury и установили из него специфическую версию PHP.
Шаг 1: Установите необходимые утилиты
sudo apt install ca-certificates curl
Что делает: Устанавливает пакеты сертификатов (ca-certificates) и утилиту curl для загрузки файлов по сети.
Зачем: Нам понадобится curl, чтобы скачать ключ репозитория, а сертификаты нужны для безопасного подключения по HTTPS.
Шаг 2: Скачайте и установите ключ репозитория Sury
curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
Что делает:
curl -fsSLo— загружает файл с указанного URL:-f— возвращать ошибку при неудаче-s— тихий режим (без прогресс-бара)-S— показывать ошибки-L— следовать перенаправлениям-o— сохранить в файл/tmp/debsuryorg-archive-keyring.deb— временный файл для сохраненияdpkg -i— устанавливает DEB-пакет с ключом репозитория
Зачем: Репозиторий Sury подписан цифровым ключом. Установка этого пакета добавляет ключ в систему, чтобы apt мог проверить подлинность пакетов из этого репозитория.
Шаг 3: Автоматически определите кодовое имя вашего Debian
CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME")
echo $CODENAME
Что делает:
. /etc/os-release— загружает переменные из файла/etc/os-release, где хранится информация о релизе&&— затем выполняетecho "$VERSION_CODENAME", выводя кодовое имя (trixie,bookwormилиbullseye)CODENAME=...— сохраняет это значение в переменнуюCODENAMEecho $CODENAME— проверяет, что определение прошло успешно
✅ Ожидаемый вывод (пример для Debian 13):
trixie
Зачем: Мы будем использовать эту переменную при создании файла репозитория, чтобы он автоматически подстроился под ваш релиз Debian.
Шаг 4: Создайте файл репозитория Sury в формате DEB822
printf '%s\n' \
"Types: deb" \
"URIs: https://packages.sury.org/php/" \
"Suites: ${CODENAME}" \
"Components: main" \
"Signed-By: /usr/share/keyrings/debsuryorg-archive-keyring.gpg" | sudo tee /etc/apt/sources.list.d/sury-php.sources > /dev/null
Что делает:
printf '%s\n' ...— выводит каждую строку в кавычках, добавляя перевод строки\(обратный слэш) — позволяет разбить длинную команду на несколько строк| sudo tee /etc/apt/sources.list.d/sury-php.sources— передаёт выводprintfкомандеtee, которая записывает его в файл с правами root> /dev/null— подавляет выводteeна экран (чтобы не дублировать)
Зачем: Современный Debian использует файлы .sources в формате DEB822 вместо старых .list. Мы создаём такой файл вручную, чтобы избежать ошибок apt update.
Шаг 5: Проверьте содержимое созданного файла
cat /etc/apt/sources.list.d/sury-php.sources
Что делает: cat — выводит содержимое файла.
✅ Ожидаемый вывод (пример для Debian 13):
Types: deb
URIs: https://packages.sury.org/php/
Suites: trixie
Components: main
Signed-By: /usr/share/keyrings/debsuryorg-archive-keyring.gpg
Шаг 6: Обновите список пакетов и проверьте репозиторий
sudo apt update
Что делает: Обновляет списки пакетов из всех подключённых репозиториев, включая новый Sury.
Ожидаемый вывод (должны быть строки с packages.sury.org):
Get:1 https://packages.sury.org/php trixie InRelease
Get:2 https://packages.sury.org/php trixie/main amd64 Packages
...
Теперь проверим, видит ли apt пакет для нужной версии PHP (замените 8.4 на вашу версию):
apt-cache policy php8.4-imagick
Что делает: apt-cache policy — показывает информацию о доступных версиях пакета.
Зачем: Убедиться, что пакет есть в репозитории Sury и что apt может его установить.
Шаг 7: Установите версионный пакет PHP-Imagick
sudo apt install php8.4-imagick
Что делает: Устанавливает конкретную версию расширения (здесь php8.4-imagick).
⚠️ Важно: Замените 8.4 на вашу версию PHP: 8.3, 8.2, 8.1 или другую. Если не знаете свою версию, выполните:
php -v | head -n 1
Это покажет что-то вроде PHP 8.4.1 (cli). Значит, вам нужен пакет php8.4-imagick.
Шаг 8: Проверьте загрузку расширения
php -m | grep -x imagick
✅ Ожидаемый вывод: imagick
Сравнение методов установки PHP-Imagick
| Метод | Канал | Версии PHP | Обновления | Для кого |
|---|---|---|---|---|
| Debian APT | Официальные репозитории Debian | PHP 8.4 (Deb 13), 8.2 (Deb 12), 7.4 (Deb 11) | Через apt upgrade | Большинство серверов, использующих стандартную PHP |
| Sury PHP | Репозиторий Sury | Конкретные версии: 8.4, 8.3, 8.2, 8.1 и старше | Через apt upgrade | Серверы с нестандартной версией PHP или устаревшие релизы |
Решение типичных проблем
8.1 Ошибка: Class ‘Imagick’ not found
Симптом: При запуске PHP-скрипта, который использует new Imagick(), появляется фатальная ошибка:
Fatal error: Class 'Imagick' not found in /var/www/html/script.php on line X
Причина: Расширение Imagick либо не установлено, либо загружено не для той версии PHP, которую использует ваш веб-сервер или скрипт.
Пошаговое решение:
Шаг 1: Проверьте, установлено ли расширение для CLI (командной строки):
php -m | grep imagick
Что делает: Показывает, загружено ли расширение в командной версии PHP.
Что ищем: Строку imagick.
Если её нет — расширение не установлено. Вернитесь к шагам установки.
Шаг 2: Узнайте, какой SAPI (интерфейс) использует ваш веб-сервер:
- Apache с mod_php — нужно перезагрузить Apache
- PHP-FPM — нужно перезагрузить соответствующий пул
# Проверяем, запущен ли PHP-FPM
systemctl list-units --type=service 'php*-fpm.service'
Что делает: Показывает все сервисы PHP-FPM в системе.
Шаг 3: Перезапустите нужный сервис:
Для Apache:
sudo systemctl restart apache2
Для PHP-FPM (замените 8.4 на вашу версию):
sudo systemctl restart php8.4-fpm
Шаг 4: Создайте простой PHP-файл для проверки в веб-доступе:
# Для Apache (стандартная директория Debian)
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
# Для Nginx (если вы используете стандартную настройку)
# echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/info.php
Что делает: Создаёт файл info.php в директории по умолчанию для вашего веб-сервера. Убедитесь, что вы раскомментировали и используете нужную строку для Apache или Nginx.
Шаг 5: Откройте в браузере http://ваш_сервер/info.php и найдите строку imagick. Если она есть — расширение загружено.
⚠️ Важно: После проверки удалите файл info.php:
sudo rm /var/www/html/info.php
# Для Nginx: sudo rm /usr/share/nginx/html/info.php
Оставлять такой файл на рабочем сервере опасно — он раскрывает конфиденциальную информацию.
8.2 Ошибка: Несовпадение версий PHP и пакета Imagick
Симптом: Расширение установлено, но не загружается. Команда php -m | grep imagick ничего не показывает.
Причина: Вы установили пакет php8.4-imagick, но ваша активная версия PHP — 8.2 (или наоборот).
Пошаговое решение:
Шаг 1: Определите активную версию PHP:
php -v | head -n 1
Пример вывода:
PHP 8.2.20 (cli)
Шаг 2: Посмотрите, какой пакет Imagick установлен:
dpkg -l 'php*-imagick' | grep '^ii'
Что делает: dpkg -l — список установленных пакетов, фильтр 'php*-imagick' — ищет пакеты с именем, начинающимся на php и заканчивающимся на -imagick, grep '^ii' — показывает только полностью установленные пакеты.
Что означают символы в начале строки:
ii— пакет установлен корректноiUилиiF— пакет не доустановлен (проблемы с зависимостями)
Пример вывода:
ii php8.4-imagick 3.7.0-1 amd64 Provides a wrapper to the ImageMagick library
Шаг 3: Если версии не совпадают (в примере PHP 8.2, а пакет 8.4), удалите неверный пакет и установите правильный:
# Удаляем неверный пакет
sudo apt remove php8.4-imagick
# Устанавливаем нужный (для PHP 8.2)
sudo apt install php8.2-imagick
Шаг 4: Перезапустите веб-сервер или PHP-FPM (как описано в проблеме 8.1).
8.3 Ошибка: Пакет php-imagick не найден
Симптом: При попытке установить php-imagick появляется сообщение:
E: Unable to locate package php-imagick
Причина: Не подключены репозитории main, contrib и non-free, или не обновлён список пакетов.
Пошаговое решение:
Шаг 1: Проверьте, какие репозитории подключены:
cat /etc/apt/sources.list | grep -vE '^#|^$'
Что делает: Выводит содержимое файла /etc/apt/sources.list, исключая закомментированные строки (начинающиеся с #) и пустые строки.
Шаг 2: Если нет строк с main contrib non-free, добавьте их. Для Debian 13, 12, 11:
sudo sed -i 's/main/main contrib non-free/g' /etc/apt/sources.list
Что делает: sed -i — редактирует файл на месте; 's/main/main contrib non-free/g' — заменяет каждое слово main на main contrib non-free в каждой строке.
Зачем: Пакет php-imagick и его зависимости (ImageMagick) находятся в этих репозиториях.
Шаг 3: Обновите список пакетов:
sudo apt update
Шаг 4: Повторите установку:
sudo apt install php-imagick
8.4 Ошибка: Не удаётся подключить репозиторий Sury (404 Not Found)
Симптом: При выполнении sudo apt update появляются ошибки:
Err:1 https://packages.sury.org/php trixie InRelease
404 Not Found
Причина: Вы указали неверное кодовое имя релиза в файле репозитория.
Пошаговое решение:
Шаг 1: Проверьте ваше кодовое имя Debian:
. /etc/os-release && echo "$VERSION_CODENAME"
Шаг 2: Удалите неверный файл репозитория:
sudo rm /etc/apt/sources.list.d/sury-php.sources
Шаг 3: Заново создайте файл, используя правильное кодовое имя (повторите шаги 3-6 из способа 2).
Шаг 4: Если ошибка остаётся — возможно, Sury не поддерживает ваш старый релиз. Проверьте список поддерживаемых версий на сайте Sury.
8.5 Ошибка: Нет прав на запись при обработке изображений
Симптом: Расширение Imagick установлено, но при попытке сохранить обработанное изображение возникает ошибка Permission denied.
Причина: Веб-сервер (пользователь www-data) не имеет прав на запись в директорию, куда вы пытаетесь сохранить изображения.
Пошаговое решение:
Шаг 1: Узнайте, от какого пользователя работает ваш веб-сервер:
Для Apache:
ps aux | grep apache | grep -v grep | head -n 1 | awk '{print $1}'
Для Nginx с PHP-FPM:
ps aux | grep php-fpm | grep -v grep | head -n 1 | awk '{print $1}'
Обычно это www-data.
Шаг 2: Проверьте права на целевую директорию:
ls -la /путь/к/директории/
Пример вывода:
drwxr-xr-x 2 root root 4096 May 15 10:00 uploads
В этом примере владелец — root, поэтому www-data не может туда записывать.
Шаг 3: Измените владельца или права:
Вариант A (рекомендуемый) — сделать владельцем www-data:
sudo chown -R www-data:www-data /путь/к/директории/
Вариант B — дать права на запись для группы (если директория должна остаться у root):
sudo chmod -R 775 /путь/к/директории/
sudo chgrp -R www-data /путь/к/директории/
Что означают права:
775— владелец: всё (7=rwx), группа: чтение и запись (7=rwx), остальные: только чтение и выполнение (5=rx)
Шаг 4: Проверьте, что теперь можно создать файл:
sudo -u www-data touch /путь/к/директории/test.txt && echo "OK" || echo "FAIL"
Чек-лист: что проверить после установки
После установки PHP-Imagick выполните эти проверки, чтобы убедиться, что всё работает корректно:
- [ ] Расширение загружено в CLI:
php -m | grep imagick→ выводimagick - [ ] Веб-сервер перезапущен:
sudo systemctl restart apache2илиsudo systemctl restart php8.4-fpm - [ ] Расширение видно в phpinfo(): создали и удалили
info.phpсphpinfo(), нашли блокimagick - [ ] Нет конфликта версий:
php -vиdpkg -l 'php*-imagick'показывают одинаковые версии - [ ] Можно создать миниатюру: выполните в терминале:
php -r '$image = new Imagick(); $image->newImage(100, 100, "red"); $image->writeImage("/tmp/test.png"); echo file_exists("/tmp/test.png") ? "OK" : "FAIL";'
✅ Ожидаемый вывод: OK
Обновление PHP-Imagick
Обновление зависит от того, откуда вы устанавливали расширение.
Для пакета из официальных репозиториев:
sudo apt update && sudo apt install --only-upgrade php-imagick
Для пакета из репозитория Sury:
sudo apt update && sudo apt install --only-upgrade php8.4-imagick
(замените 8.4 на вашу версию)
Что делает: --only-upgrade — обновляет пакет, только если он уже установлен, но не устанавливает его заново.
Удаление PHP-Imagick
Полное удаление пакета:
sudo apt remove php-imagick
sudo apt autoremove
Что делает: apt remove — удаляет пакет, оставляя конфиги; apt autoremove — удаляет пакеты, установленные как зависимости и больше не нужные.
⚠️ Внимание: При удалении php-imagick на чистой системе Debian 13 autoremove может также удалить php8.4-cli и другие базовые пакеты. Внимательно читайте список удаляемых пакетов перед подтверждением!
Для удаления версионного пакета:
sudo apt remove php8.4-imagick
sudo apt autoremove
Если вы хотите полностью отключить репозиторий Sury:
sudo rm /etc/apt/sources.list.d/sury-php.sources
sudo apt remove debsuryorg-archive-keyring
sudo apt update
Проверьте, что репозиторий удалён:
grep -R "packages.sury.org/php" /etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null
✅ Ожидаемый вывод: пустота (ни одной строки).
Часто задаваемые вопросы (FAQ)
Вопрос: Нужен ли мне репозиторий Sury для установки PHP-Imagick?
Ответ: Нет. Debian 13, 12 и 11 уже содержат php-imagick в стандартных репозиториях. Sury нужен только если вы используете нестандартную версию PHP (например, PHP 8.3 на Debian 12).
Вопрос: В чём разница между php-imagick и ImageMagick?
Ответ: php-imagick — это расширение PHP, которое позволяет PHP-скриптам использовать библиотеки ImageMagick. А ImageMagick — это набор самостоятельных консольных утилит (convert, identify, magick и др.). Они не взаимозаменяемы.
Вопрос: Какой пакет ставить: php-imagick или php8.4-imagick?
Ответ: Если вы устанавливаете из официальных репозиториев Debian — ставьте php-imagick. Если из Sury — ставьте версионный пакет, соответствующий вашей PHP (php8.4-imagick, php8.3-imagick и т.д.).
Вопрос: Почему после установки PHP всё равно говорит Class Imagick not found?
Ответ: Две самые частые причины: 1) Не совпадают версии PHP и пакета Imagick (проверьте через php -v и dpkg -l 'php*-imagick'). 2) Не перезапущен PHP-FPM или Apache (выполните sudo systemctl restart php8.4-fpm).
Заключение
Теперь PHP-Imagick установлен на вашем Debian и готов к обработке изображений: созданию миниатюр, конвертации форматов, работе с PDF и многому другому.
Что дальше?
- Если вы ещё не настроили веб-сервер, установите и настройте:
- Nginx на Debian
- Apache на Debian
- Настройте PHP-FPM для оптимальной производительности
- Узнайте, как установить ImageMagick (консольные утилиты)