Как проверить установленные модули PHP

Раздел: Расширения -> Управление модулями

Варианты просмотра модулей PHP

Как получить полную информацию о всех установленных модулях PHP в веб-среде?

Самый простой способ – использовать встроенную функцию phpinfo(). Она выводит детальную информацию о конфигурации PHP, включая все загруженные модули, их версии, настройки и авторов.

Пример кода:

<?php
phpinfo();
?>

После запуска этого скрипта на веб-сервере откроется страница с таблицами. Раздел с информацией о модулях называется "Module Authors" и "PHP Credits". Для каждого модуля отображаются его функции и параметры.

Типичные проблемы и ошибки:

  • Функция phpinfo() выводит много данных, что может затруднить поиск конкретного модуля. Рекомендуется использовать phpinfo(INFO_MODULES) для вывода только информации о модулях.
  • На production-серверах функция может быть отключена директивой disable_functions. В таком случае следует обратиться к администратору или использовать другие способы.

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

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

<?php
$extensions = get_loaded_extensions();
print_r($extensions);
?>

Результат:

Array
(
    [0] => Core
    [1] => date
    [2] => libxml
    [3] => openssl
    [4] => pcre
    [5] => json
    // ... и другие
)

Возможные сложности:

  • Функция не покажет модули, которые не загружены (например, установлены, но отключены в php.ini). Для проверки наличия конкретного модуля используйте extension_loaded().
  • Массив может содержать псевдонимы модулей, что иногда вводит в заблуждение.

Как проверить, загружен ли конкретный модуль PHP?

Для точечной проверки используется функция extension_loaded(). Она принимает имя модуля (строку) и возвращает true или false.

<?php
if (extension_loaded('mbstring')) {
    echo 'Модуль mbstring загружен';
} else {
    echo 'Модуль mbstring не загружен';
}
?>

Этот подход часто применяется в требованиях приложений (например, WordPress, Laravel).

Ошибки:

  • Имя модуля чувствительно к регистру (обычно нижний регистр).
  • Если модуль является частью ядра (Core), extension_loaded('Core') вернёт true, но это не всегда полезно.

Как вывести список модулей из командной строки?

Утилита php -m в терминале показывает все скомпилированные или загруженные модули PHP CLI. Этот способ не зависит от веб-сервера.

php -m

Пример результата:

[PHP Modules]
Core
date
libxml
openssl
pcre
json
...

[Zend Modules]
Xdebug

Особенности:

  • Вывод относится только к версии PHP, используемой в командной строке. Для веб-версии может быть отдельный php.ini, поэтому модули могут отличаться.
  • Для просмотра модулей, доступных для веб-сервера, можно выполнить php -m в том же окружении, что и веб (например, через SSH на сервере).

Как узнать версию конкретного модуля PHP?

Функция phpversion() с указанием имени модуля возвращает его версию. Если модуль не загружен, возвращается false.

<?php
echo phpversion('mbstring'); // выведет "7.4.33" или false
?>

Это полезно для проверки совместимости модуля с версией PHP.

Потенциальная проблема:

Для модулей, не имеющих собственной версии (например, Core), функция может вернуть общую версию PHP.

Расширенные примеры работы с информацией о модулях PHP

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

Получение списка функций конкретного модуля через ReflectionExtension

Класс ReflectionExtension предоставляет API для анализа модулей. Можно получить не только имя, но и описание, версию, список функций, классы и константы, определённые модулем.

Пример
<?php
$ext = new ReflectionExtension('mbstring');
echo 'Имя модуля: ' . $ext->getName() . "\n";
echo 'Версия: ' . $ext->getVersion() . "\n";
$functions = $ext->getFunctions();
echo 'Функции (' . count($functions) . "):\n";
foreach ($functions as $func) {
    echo '  - ' . $func->getName() . "\n";
}
?>

Результат выполнения скрипта:

Имя модуля: mbstring
Версия: 7.4.33
Функции (59):
  - mb_strlen
  - mb_strpos
  - mb_stristr
  - ...

Этот способ идеален для создания документации или динамического анализа доступных возможностей.

Извлечение информации о модулях из вывода phpinfo() в структурированном виде

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

Пример
<?php
ob_start();
phpinfo(INFO_MODULES);
$info = ob_get_clean();

// Извлекаем названия модулей
preg_match_all('/<h2><a name="module_([^"]+)">/', $info, $matches);
$modules = $matches[1];
print_r($modules);
?>

Результат:

Array
(
    [0] => Core
    [1] => date
    [2] => libxml
    [3] => openssl
    ...
)

Однако такой подход хрупок и зависит от версии PHP. Лучше использовать get_loaded_extensions() для базового списка.

Сравнение модулей, загруженных в CLI и веб-версии PHP

На одном сервере могут быть разные php.ini для CLI и веб-сервера. Для выявления расхождений можно выполнить скрипт, который выводит модули через веб, и сравнить с выводом php -m.

Пример
<?php
// Веб-скрипт: выводит модули в формате JSON
header('Content-Type: application/json');
echo json_encode(get_loaded_extensions());
?>

Затем в CLI:

Пример
curl http://localhost/modules.php | jq .

И сравнить с:

Пример
php -m | awk '/^[a-zA-Z]/ {print $1}'

Различия укажут на несовпадение конфигураций. Это помогает при отладке проблем, когда приложение работает в CLI, но не в вебе.

Получение параметров ini-файла конкретного модуля

Многие модули добавляют свои директивы в php.ini. Для просмотра их значений используется ini_get() или ini_get_all() с указанием модуля.

Пример
<?php
// Получить все ini-директивы модуля xdebug
if (extension_loaded('xdebug')) {
    $xdebug_ini = ini_get_all('xdebug');
    foreach ($xdebug_ini as $name => $value) {
        echo "$name = {$value['local_value']}\n";
    }
}
?>

Результат:

xdebug.mode = develop
xdebug.start_with_request = default
xdebug.output_dir = /tmp
...

Это полезно для проверки настроек отладки или оптимизации.

Автоматическая генерация отчёта о всех модулях с версиями и статусами

Скрипт, который собирает все загруженные модули, их версии, а также проверяет, включены ли они (через extension_loaded). Результат можно вывести в виде таблицы.

Пример
<?php
echo "<table border='1'>";
echo "<tr><th>Модуль</th><th>Версия</th><th>Загружен</th></tr>";
$extensions = get_loaded_extensions();
sort($extensions);
foreach ($extensions as $ext) {
    $version = phpversion($ext) ?: 'нет версии';
    $loaded = extension_loaded($ext) ? 'Да' : 'Нет';
    echo "<tr><td>$ext</td><td>$version</td><td>$loaded</td></tr>";
}
echo "</table>";
?>

Результат – HTML-таблица со всеми модулями, отсортированными по алфавиту. Этот отчёт можно использовать для аудита сервера.

Просмотр модуля PHP - comments

En
Mod view php (php)