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

Раздел: Администрирование PHP -> Информация о конфигурации PHP

Основные способы просмотра информации о PHP

Наиболее универсальное и эффективное решение

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


<?
phpinfo();
?>
  

View php info (просмотр информации о php)

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

Возможные проблемы: при открытии страницы может возникнуть ошибка, если в файле есть синтаксическая ошибка или если функция отключена в php.ini (директива disable_functions). Также не следует оставлять такой файл на рабочем сервере, так как он раскрывает критическую информацию о системе.

Решение: убедиться, что функция не заблокирована, после использования удалить файл или ограничить к нему доступ через веб-сервер (например, с помощью .htaccess для Apache).

Как получить только определённые разделы конфигурации без лишнего объёма?

Функция phpinfo() принимает необязательные параметры - битовые маски, позволяющие выводить только выбранные разделы. Например:


<?
// Только информацию о расширениях
phpinfo(INFO_MODULES);
?>
  

Это сокращает время загрузки и упрощает поиск нужных данных. Параметр INFO_GENERAL выводит общие сведения, INFO_CONFIGURATION - значения директив, INFO_CREDITS - список разработчиков. Комбинировать можно через битовое ИЛИ: INFO_GENERAL | INFO_MODULES.

Ошибка: при неверном указании константы (например, опечатке) возникает ошибка уровня E_WARNING или E_NOTICE. Необходимо использовать встроенные константы без кавычек.

Как сохранить вывод phpinfo() в переменную для дальнейшей обработки?

С помощью буферизации вывода можно перехватить результат phpinfo() и сохранить его в строку:


<?
ob_start();
phpinfo();
$output = ob_get_clean();
// Теперь $output содержит весь HTML-код страницы
?>
  

Это полезно для логирования, отправки по почте или извлечения конкретных значений через регулярные выражения.

Проблема: при использовании буферизации могут быть потеряны некоторые заголовки HTTP, если они уже отправлены. Рекомендуется вызывать ob_start() до любого вывода.

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

В CLI-версии PHP существует встроенная команда:


php -i
  

Она выводит те же данные, что и phpinfo(), но в текстовом формате (без HTML-разметки). Удобно для быстрой проверки на удалённом сервере по SSH.

Можно также выполнить скрипт:


<?php phpinfo(); ?>
  

затем перенаправить вывод в файл: php script.php > info.txt.

Особенность: в CLI-режиме может отсутствовать информация о веб-окружении (например, переменные $_SERVER, связанные с веб-сервером).

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

Можно использовать функцию ini_get() для получения отдельных директив или get_loaded_extensions() для списка расширений. Пример:


<?
echo 'Версия PHP: ' . phpversion() . "\n";
echo 'Максимальный размер загрузки: ' . ini_get('upload_max_filesize') . "\n";
echo 'Загруженные расширения: ' . implode(', ', get_loaded_extensions()) . "\n";
?>
  

Такой подход безопаснее, так как не раскрывает всю конфигурацию.

Ошибка: функция ini_get() возвращает строку, однако некоторые директивы могут иметь сложный тип (массив). В таких случаях лучше использовать ini_get_all().

Как получить информацию о PHP без запуска самого PHP (например, через файловый менеджер хостинга)?

Некоторые хостинг-панели предоставляют встроенную функцию просмотра PHP-информации. Если такой возможности нет, можно создать файл info.php с содержимым <?php phpinfo(); ?>, открыть его в браузере, а затем сразу удалить.

Общая рекомендация: после использования любого скрипта, показывающего конфигурацию, его необходимо немедленно удалить или защитить паролем. Утечка phpinfo может дать злоумышленнику ценную информацию о настройках и уязвимостях.

Расширенные примеры использования phpinfo и альтернативных подходов

Пример 1: Вывод в формате JSON для интеграции с системами мониторинга

Можно преобразовать ключевые параметры PHP в JSON-структуру. Для этого извлекаются нужные данные с помощью phpversion(), ini_get_all() и get_loaded_extensions(). Пример скрипта phpinfo_json.php:

Пример

<?
// Собираем данные в массив
$info = [
    'version' => phpversion(),
    'loaded_extensions' => get_loaded_extensions(),
    'ini_values' => ini_get_all(),
    'server_software' => $_SERVER['SERVER_SOFTWARE'] ?? 'unknown'
];

// Устанавливаем заголовок для вывода JSON
header('Content-Type: application/json; charset=utf-8');
echo json_encode($info, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
?>

Результат (сокращённый пример):

{
    "version": "8.2.12",
    "loaded_extensions": ["Core", "date", "json", "mbstring", ...],
    "ini_values": {
        "allow_url_fopen": {
            "global_value": "1",
            "local_value": "1",
            "access": 4
        },
        ...
    },
    "server_software": "Apache/2.4.57 (Unix)"
}

Пример 2: Фильтрация вывода phpinfo по конкретному разделу и запись в файл

Создадим скрипт, который записывает только раздел 'PHP License' в текстовый файл. Для этого используется буферизация и удаление HTML-тегов:

Пример

<?
ob_start();
phpinfo(INFO_LICENSE);
$html = ob_get_clean();

// Извлекаем только текст из HTML
$text = strip_tags($html);

// Сохраняем в файл
file_put_contents('license.txt', $text);
echo 'Лицензия сохранена в license.txt';
?>

Результат: в текущем каталоге появится файл license.txt, содержащий текст лицензии PHP.

Пример 3: Сравнение вывода phpinfo в CLI и веб-версии

В командной строке можно использовать флаг -i и передать вывод в grep для поиска:

Пример

php -i | grep -i 'memory_limit'
  

Результат: строка, содержащая значение memory_limit, например:

memory_limit => 128M => 128M

В веб-версии для аналогичного поиска можно использовать JavaScript или инструменты разработчика браузера.

Пример 4: Вывод информации только о загруженных модулях без встроенных

Функция get_loaded_extensions() возвращает все загруженные модули, включая встроенные. Для получения только динамических (загруженных через extension в php.ini) можно сравнить с массивом get_loaded_extensions(true) (параметр zend_extensions). Однако для упрощения используем фильтрацию по директории загрузки:

Пример

<?
$all_ext = get_loaded_extensions();
$ext_dir = ini_get('extension_dir');
$dynamic_ext = [];

foreach ($all_ext as $ext) {
    // Пытаемся найти файл расширения в директории
    if (file_exists($ext_dir . DIRECTORY_SEPARATOR . $ext . '.so') ||
        file_exists($ext_dir . DIRECTORY_SEPARATOR . $ext . '.dll')) {
        $dynamic_ext[] = $ext;
    }
}
echo 'Динамические расширения: ' . implode(', ', $dynamic_ext);
?>

Результат: список расширений, для которых в директории extension_dir найден соответствующий файл (работает корректно только при стандартном расположении).

Пример 5: Безопасный вывод phpinfo для ограниченного круга лиц

Можно создать скрипт, который выводит phpinfo только если IP-адрес клиента совпадает с заданным белым списком:

Пример

<?
$allowed_ips = ['127.0.0.1', '192.168.1.100']; // Заменить на свои

if (in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
    phpinfo();
} else {
    http_response_code(404);
    exit('Страница не найдена');
}
?>

Этот подход позволяет оставить файл на сервере, но скрыть его от посторонних.

Пример 6: Извлечение значения конкретной директивы из гигантского вывода phpinfo

Используем буферизацию и регулярное выражение для получения short_open_tag:

Пример

<?
ob_start();
phpinfo(INFO_CONFIGURATION);
$html = ob_get_clean();

preg_match('/short_open_tag.*?\n.*?(".*?")/s', $html, $match);
$value = $match[1] ?? 'не найдено';
echo "short_open_tag: $value";
?>

Результат: short_open_tag: "On" или аналогичное значение.

Просмотр информации о PHP - comments

En
View php info (php)