Получение настроек PHP (phpinfo) для диагностики

Раздел: Администрирование PHP -> Диагностика

Способы получения информации о конфигурации PHP

Как получить полную информацию о PHP в веб-окружении?

Основной и наиболее универсальный способ — использование встроенной функции phpinfo(). Она выводит огромный объём данных: версию PHP, загруженные расширения, директивы конфигурации, переменные окружения, HTTP-заголовки и многое другое. Скрипт для этого выглядит так:

<? phpinfo(); ?>

Сохраните этот код в файл info.php в корневой директории веб-сервера. При обращении к этому файлу в браузере отобразится таблица с разделами. Данные удобно просматривать и искать нужные параметры через встроенный поиск браузера.

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

  • Вывод может быть слишком большим — страница загружается медленно. В таком случае можно ограничить вывод с помощью констант phpinfo(INFO_MODULES) или phpinfo(INFO_CONFIGURATION).
  • Если на сервере отключён вывод ошибок, скрипт может не сработать. Проверьте, что файл исполняется через веб-сервер, а не через CLI.
  • Из соображений безопасности после диагностики следует удалить файл info.php, чтобы злоумышленники не получили доступ к конфигурации.

Цель использования:

  • Быстрая проверка версии PHP и доступных расширений.
  • Поиск конкретной директивы, например, upload_max_filesize.
  • Сравнение настроек разных окружений.

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

Если веб-сервер не запущен или доступен только терминал, используется команда php -i (аналог phpinfo() в CLI). Выполните в консоли:

php -i

Вывод аналогичен веб-версии, но без HTML-форматирования. Для поиска по выводу можно применить grep:

php -i | grep upload_max_filesize

Типичные ошибки

  • Команда не найдена — PHP не установлен в PATH. Укажите полный путь к исполняемому файлу.
  • Вывод содержит только директивы CLI-режима, которые могут отличаться от веб-режима, если используются разные php.ini.

Когда применяется:

  • При диагностике сервера по SSH без веб-интерфейса.
  • В автоматизированных скриптах для сбора информации о PHP.

Как получить только определённые директивы или расширения?

Для выборочного получения данных применяются функции phpversion(), ini_get(), get_loaded_extensions() и ini_get_all(). Примеры:

echo 'Версия PHP: ' . phpversion();
echo 'Максимальный размер загрузки: ' . ini_get('upload_max_filesize');
print_r(get_loaded_extensions());
print_r(ini_get_all());

Возможные затруднения

  • Функция ini_get() возвращает строку, для логических директив — пустую строку или '0'. Требуется преобразование.
  • Список расширений может быть неполным, если расширение загружено динамически.

Случаи использования:

  • Программная проверка наличия необходимого расширения (например, PDO).
  • Вывод конкретного параметра без лишней информации.
  • Интеграция в панель управления для отображения настроек.

Как получить все директивы из файла php.ini?

Файл конфигурации можно прочитать вручную или с помощью parse_ini_file(). Укажите путь к php.ini (обычно он отображается в выводе phpinfo()):

$ini = parse_ini_file('/etc/php/8.1/cli/php.ini', true);
print_r($ini);

Проблемы

  • Не все директивы содержатся в php.ini; многие устанавливаются по умолчанию или переопределяются в других конфигурационных файлах (.user.ini, .htaccess).
  • Функция не обрабатывает системные значения, возвращаемые только через ini_get().

Применение:

  • Получение исходных настроек для сравнения с текущими.
  • Автоматический аудит конфигурации.

Как программно обработать вывод phpinfo()?

Чтобы сохранить или проанализировать данные из phpinfo(), используется буферизация через ob_start(). Это позволяет перехватить HTML-вывод и работать с ним как со строкой:

ob_start();
phpinfo();
$html = ob_get_clean();
echo strip_tags($html); // удалить HTML-теги

Сложности

  • Разбор HTML-таблиц требует дополнительных регулярных выражений или парсеров.
  • Из-за большого объёма данных буферизация может потреблять много памяти.

Когда это нужно:

  • Для создания собственного отчёта о конфигурации в нестандартном формате (JSON, XML).
  • Для интеграции с системами мониторинга.

Расширенные примеры работы с информацией о PHP

Парсинг вывода phpinfo() с извлечением разделов

Пример получения только раздела о модулях с помощью регулярного выражения:

Пример
ob_start();
phpinfo(INFO_MODULES);
$html = ob_get_clean();

// Удаление разметки и извлечение текста модулей
$modules = strip_tags($html);
echo $modules;
module_name
module_name
... (сокращено)

Пояснение:

Константа INFO_MODULES ограничивает вывод только данными о расширениях. После буферизации строка очищается от HTML - остаётся чистый текст, который можно сохранить или проанализировать.

Сравнение двух конфигураций с помощью phpinfo(INFO_GENERAL)

Скрипт выводит только общую информацию (версию, дату сборки, путь к php.ini) в простом текстовом формате:

Пример
ob_start();
phpinfo(INFO_GENERAL);
$html = ob_get_clean();

// Удаляем HTML-теги и лишние пробелы
$plain = preg_replace('/\s+/', ' ', strip_tags($html));
echo $plain;
PHP Version => 8.1.12 System => Linux server Build Date => Dec 1 2022 12:00:00 ...

Такой формат удобно сравнивать с помощью diff.

Получение списка расширений с версиями

Функции get_loaded_extensions() и phpversion() для каждого расширения:

Пример
$extensions = get_loaded_extensions();
sort($extensions);
foreach ($extensions as $ext) {
    echo $ext . ' => ' . phpversion($ext) . PHP_EOL;
}
curl => 7.87.0
date => 8.1.12
gd => 2.3.3
pdo => 8.1.12
...

Вывод всех директив конфигурации с типом значения

ini_get_all() возвращает массив с описанием каждой директивы, включая глобальное и локальное значение:

Пример
$directives = ini_get_all();
echo 'Директива | Глобальное | Локальное' . PHP_EOL;
foreach ($directives as $key => $value) {
    echo $key . ' | ' . $value['global_value'] . ' | ' . $value['local_value'] . PHP_EOL;
}
allow_url_fopen | 1 | 1
date.timezone | Europe/Moscow | Europe/Moscow
upload_max_filesize | 64M | 64M
...

Использование phpinfo() в командной строке с выводом в файл

Команда для сохранения полной информации в текстовый файл:

Пример
php -i > php_info.txt

Затем файл можно проанализировать любым текстовым редактором.

Сбор информации через PHP-скрипт в формате JSON

Пример создания собственного отчёта в JSON:

Пример
$info = [
    'version' => phpversion(),
    'extensions' => get_loaded_extensions(),
    'directives' => [
        'upload_max_filesize' => ini_get('upload_max_filesize'),
        'post_max_size' => ini_get('post_max_size'),
        'memory_limit' => ini_get('memory_limit'),
    ],
    'sapi' => php_sapi_name(),
];
echo json_encode($info, JSON_PRETTY_PRINT);
{
    "version": "8.1.12",
    "extensions": ["curl", "date", "gd", "pdo", ...],
    "directives": {
        "upload_max_filesize": "64M",
        "post_max_size": "128M",
        "memory_limit": "256M"
    },
    "sapi": "cli"
}

Динамическая проверка наличия расширения с обработкой ошибки

Пример надёжной проверки перед использованием:

Пример
$required = ['pdo', 'mbstring', 'gd'];
$loaded = get_loaded_extensions();
$missing = array_diff($required, $loaded);
if (!empty($missing)) {
    echo 'Отсутствуют расширения: ' . implode(', ', $missing);
} else {
    echo 'Все необходимые расширения загружены.';
}
Все необходимые расширения загружены.

Такой подход применяется в инсталляторах CMS.

Информация о PHP - comments

En
Info php start (php)