Требуемые расширения PHP: настройка окружения

Раздел: PHP окружение -> Конфигурация PHP

Требуемые расширения PHP: проверка и установка

Как автоматически проверить наличие всех необходимых расширений PHP?

Наиболее эффективный способ создания скрипта, который перебирает список требуемых расширений и сообщает о недостающих. Такой скрипт запускается вручную или подключается к процессу развёртывания.


<?php
$required_extensions = ['pdo', 'mbstring', 'curl', 'json', 'openssl', 'xml'];
$missing = [];
foreach ($required_extensions as $ext) {
    if (!extension_loaded($ext)) {
        $missing[] = $ext;
    }
}
if (empty($missing)) {
    echo "Все требуемые расширения установлены.";
} else {
    echo "Отсутствуют расширения: " . implode(', ', $missing);
}

Php extension required (требуемое расширение php)

После запуска скрипта через веб-сервер или командную строку виден результат. При обнаружении отсутствующих расширений их необходимо установить.

Типичная ошибка:

Если скрипт вызывает Call to undefined function extension_loaded, значит PHP работает в режиме без поддержки базовых функций, что маловероятно. Чаще проблема в том, что расширение не активировано в php.ini, и его нужно включить строкой extension=имя_расширения и перезапустить сервер.

Решение:

Отредактировать php.ini, раскомментировать или добавить строку с нужным расширением, затем перезапустить веб-сервер (Apache, Nginx, php-fpm).

Как проверить расширения PHP через терминал?

Команда php -m выводит список всех загруженных модулей. Для фильтрации конкретного расширения используйте php -m | grep mbstring. Если расширение отсутствует, оно не появится в выводе.


php -m

Php ini сервера (настройка php.ini на сервере)

Для получения подробной информации о каждом расширении полезна команда php -i | grep -i расширение. Например:


php -i | grep -i openssl

Php max upload (максимальный размер загрузки в php)

Ошибка:

Если команда php не найдена, переменные окружения не содержат путь к интерпретатору. Требуется указать полный путь или добавить каталог в PATH.

Как указать требуемые расширения в проекте с Composer?

Файл composer.json содержит секцию require, где перечисляются пакеты. Для указания расширений PHP используется свойство require с ключом вида ext-*. Это позволяет автоматизировать проверку на этапе установки зависимостей.


{
    "require": {
        "php": ">=7.4",
        "ext-pdo": "*",
        "ext-mbstring": "*",
        "ext-curl": "*"
    }
}

Set limit php (установка лимита в php)

При выполнении composer install или composer update будет проверено наличие этих расширений. Если какого-то нет, процесс завершится с ошибкой.

Возможная проблема:

Если расширение установлено, но не активировано в php.ini, Composer всё равно сообщит об ошибке. Требуется убедиться, что расширение включено в используемой версии PHP.

Как программно получить список активных расширений?

Функция get_loaded_extensions() возвращает массив имён всех загруженных расширений. Это удобно для логгирования или динамической проверки.


<?php
$extensions = get_loaded_extensions();
sort($extensions);
foreach ($extensions as $ext) {
    echo $ext . PHP_EOL;
}

настройка settings php (настройка файла settings.php)

Для детальной информации по каждому расширению используется phpinfo(), которая выводит полную конфигурацию.

Ошибка:

При выводе через phpinfo() в веб-окружении информация может быть обрезана или скрыта настройками безопасности. В таком случае стоит использовать командную строку.

Как установить недостающее расширение PHP через пакетный менеджер?

В Debian/Ubuntu расширения устанавливаются командой apt install php-имя. Например, для mbstring:


sudo apt update
sudo apt install php-mbstring

Php ниже рекомендуемого значения 512mb (увеличение лимита памяти php)

В CentOS/RHEL используется yum или dnf:


sudo dnf install php-mbstring

После установки необходимо перезапустить веб-сервер (systemctl restart apache2 или nginx).

Проблема:

Если расширение не найдено в репозиториях, возможно, его нужно добавить через PPA или собрать из исходников с помощью pecl. Например, для установки Redis:


sudo pecl install redis

Затем в php.ini добавить строку extension=redis.so.

Как добавить расширения PHP в Docker образ?

В Dockerfile можно использовать команды docker-php-ext-install (для официальных образов PHP). Список расширений передаётся аргументами.


FROM php:8.2-fpm
RUN docker-php-ext-install pdo_mysql mbstring opcache

Для установки сторонних расширений через pecl:


RUN pecl install redis && docker-php-ext-enable redis

Ошибки:

Расширение может требовать системные зависимости (libs). Их необходимо установить до вызова docker-php-ext-install через apt-get install.

Как включить расширение через php.ini вручную?

В файле php.ini находится секция с директивами extension. Расширение активируется добавлением (раскомментированием) строки extension=имя.


;extension=mysqli   # закомментировано
extension=mysqli     # активно

После редактирования необходим перезапуск веб-сервера или PHP-FPM.

Ошибка:

Если после перезапуска расширение не загружается, нужно проверить, что файл с расширением (.so или .dll) существует в указанном extension_dir. Путь к каталогу можно узнать через php -i | grep extension_dir.

Расширенные примеры для работы с расширениями PHP

1. Скрипт проверки с подробным HTML-отчётом

Пример

<?php
$required = ['pdo', 'mbstring', 'curl', 'json', 'openssl', 'xml', 'tokenizer'];
$loaded = get_loaded_extensions();
echo '<table border="1">';
echo '<tr><th>Расширение</th><th>Статус</th><th>Версия</th></tr>';
foreach ($required as $ext) {
    $status = in_array($ext, $loaded) ? 'Установлено' : 'Отсутствует';
    $version = extension_loaded($ext) ? phpversion($ext) : '-';
    echo "<tr><td>$ext</td><td>$status</td><td>$version</td></tr>";
}
echo '</table>';
Результат: таблица с перечислением всех требуемых расширений, их статусом и версией (если загружено).

2. Dockerfile с установкой расширений и системных зависимостей

Пример

FROM php:8.2-fpm

# Системные зависимости для gd, zip, intl
RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    libzip-dev \
    libicu-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd zip intl pdo_mysql opcache

# Установка Redis через pecl
RUN pecl install redis && docker-php-ext-enable redis

# Установка Xdebug для разработки (опционально)
RUN pecl install xdebug && docker-php-ext-enable xdebug

Команда docker build создаст образ со всеми перечисленными расширениями.

3. Composer.json с привязкой к платформе

Пример

{
    "require": {
        "php": ">=8.0",
        "ext-pdo": "*",
        "ext-json": "*",
        "ext-ctype": "*",
        "ext-filter": "*",
        "ext-hash": "*",
        "ext-session": "*"
    },
    "config": {
        "platform": {
            "php": "8.2",
            "ext-pdo": "1.0",
            "ext-json": "1.7"
        }
    }
}

Секция platform сообщает Composer, какие версии расширений считать доступными, что полезно для локальной разработки с отличным от продакшена набором.

4. Обработка ошибки отсутствия расширения в коде

Пример

<?php
if (!extension_loaded('pdo_mysql')) {
    throw new \RuntimeException('Расширение pdo_mysql не загружено. Установите его: apt install php-mysql');
}
// Далее код, требующий PDO MySQL

Такой подход предотвращает выполнение кода при неполной конфигурации.

5. Команда для быстрого экспорта списка расширений в файл

Пример

php -m | sort > /tmp/php_extensions.txt

Список сохраняется в текстовый файл, который можно сравнить с эталонным.

Требуемое расширение PHP - comments

En
Php extension required (php)