Требуемые расширения 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
Список сохраняется в текстовый файл, который можно сравнить с эталонным.