К основному содержимому

Установка расширений PHP на Ubuntu и Debian

PHP · 19.04.2026 · 4 мин чтения
Иллюстрация к статье «Установка расширений PHP на Ubuntu и Debian»

Типы PHP-расширений

PHP-расширения расширяют возможности языка: добавляют поддержку баз данных, изображений, криптографии, сетевых протоколов. Существует два типа: встроенные (идут в комплекте с PHP) и PECL-расширения (устанавливаются отдельно через pecl или apt).

Просмотр установленных расширений

# Список всех загруженных расширений
php -m

# Проверить конкретное расширение
php -m | grep curl

# Подробная информация
php --ri gd

Установка расширений через apt

# Обновляем список пакетов
sudo apt update

# Устанавливаем расширения для PHP 8.2
sudo apt install php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml \
    php8.2-zip php8.2-mysql php8.2-pgsql php8.2-redis \
    php8.2-imagick php8.2-intl php8.2-bcmath php8.2-soap

# Перезапускаем PHP-FPM
sudo systemctl restart php8.2-fpm

Необходимые расширения для популярных CMS

CMS / ФреймворкОбязательные расширения
WordPresscurl, gd, mbstring, mysql, xml, zip, intl
Laravelbcmath, ctype, curl, dom, fileinfo, json, mbstring, openssl, pdo, tokenizer, xml
Drupalgd, pdo, xml, json, mbstring, dom, hash
Magento 2bcmath, curl, gd, intl, mbstring, pdo_mysql, soap, xsl, zip

Установка PECL-расширений (Redis, Imagick)

# Redis через apt (рекомендуется)
sudo apt install php8.2-redis

# Imagick
sudo apt install php8.2-imagick

# Через PECL (если нет в apt)
sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php/8.2/mods-available/redis.ini
sudo phpenmod redis

Управление расширениями: phpenmod / phpdismod

# Включить расширение
sudo phpenmod -s fpm mbstring

# Отключить расширение
sudo phpdismod -s fpm xdebug

# Применить изменения
sudo systemctl reload php8.2-fpm
Для разных версий PHP одновременно укажите нужную версию: sudo apt install php7.4-curl php8.1-curl php8.2-curl — каждое расширение устанавливается независимо для каждой версии PHP.

Компиляция расширения из исходников

sudo apt install php8.2-dev
pecl download xdebug
tar xf xdebug-*.tgz && cd xdebug-*
phpize && ./configure --with-php-config=/usr/bin/php-config8.2
make && sudo make install

Типичные ошибки без нужного расширения

Call to undefined function

PHP Fatal error:  Uncaught Error: Call to undefined function curl_init() in /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php:1

Значит расширение curl не установлено вовсе, либо установлено, но не включено для того SAPI, который реально обслуживает запрос. CLI и FPM у одной версии PHP используют отдельные каталоги conf.d, и список модулей у них может отличаться.

could not find driver (PDO)

PDOException: could not find driver in /var/www/html/app/Database.php:14

Частая ошибка новичков: расширение pdo установлено, а конкретный драйвер — pdo_mysql или pdo_pgsql — нет. Это два разных пакета в apt.

Class "Imagick" not found

Fatal error: Uncaught Error: Class "Imagick" not found in /var/www/html/app/Thumbnail.php:9

PECL-расширение установлено, но не активировано, либо активировано только для одного из SAPI.

Когда установки через apt недостаточно

  • Расширение включено для CLI, но не для FPM (или наоборот) — управление модулями раздельное: phpenmod -s fpm curl и phpenmod -s cli curl — разные команды.
  • После apt install php8.2-imagick забыли перезапустить FPM — модуль подгружается в память процесса только при его старте, простого reload Nginx недостаточно.
  • Версия расширения из репозитория ondrej/php ещё не собрана под самую свежую версию PHP — тогда остаётся либо ждать обновления пакета, либо собирать из исходников.
  • Сайт использует несколько версий PHP одновременно — расширение нужно ставить под каждую версию отдельно, apt не делает это автоматически.

Проверка результата

# Расширение видно интерпретатору вообще?
php -m | grep -i curl

# Явная проверка из кода — надёжнее grep
php -r "var_dump(extension_loaded('curl'));"

# То же самое, но для PHP-FPM: создайте info.php с phpinfo()
# и ищите секцию расширения в выводе браузера — список модулей
# CLI и FPM показывается там отдельно и может отличаться

Если php -m показывает модуль, а код всё равно падает с «Call to undefined function» — почти наверняка вы проверяли CLI, а ошибка приходит из FPM (или наоборот).

Ещё один источник путаницы — расширения, собранные вручную из исходников: они кладутся не в /etc/php/8.2/mods-available/, а туда, куда указали при сборке, и phpenmod о них ничего не знает. Такие модули нужно подключать вручную директивой extension= в отдельном ini-файле и включать её в нужный конфиг SAPI руками, без автоматизации apt.

После обновления системы через apt upgrade модули, собранные из исходников, не обновляются вместе с пакетным PHP — при переходе на новую минорную версию их придётся пересобирать заново, иначе после перезапуска FPM появится ошибка о несовместимой версии API модуля.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке