PHP Info FAQ: всё, что нужно знать о phpinfo() и выводе конфигурации

Подробный FAQ по функции phpinfo(): как получить, прочитать и защитить вывод конфигурации PHP. Практические советы для разработчиков.

Что такое phpinfo() и зачем она нужна?

Функция phpinfo() — это встроенная в PHP команда, которая выводит полную информацию о текущей конфигурации интерпретатора. Когда вы запускаете скрипт, содержащий <?php phpinfo(); ?>, на экран выводится структурированная таблица с сотнями параметров: версия PHP, загруженные расширения, пути к конфигурационным файлам, переменные окружения, настройки сервера и даже HTTP-заголовки. Для разработчика это незаменимый инструмент диагностики: он помогает понять, почему не работает определённая функция, какое расширение отсутствует или какой файл конфигурации загружен.

Пример вывода phpinfo() с таблицами настроек и версией PHP

Как вызвать phpinfo()?

Самый простой способ — создать файл info.php в корне веб-сервера со следующим содержимым:

<?php
phpinfo();
?>

Затем откройте в браузере . Если PHP настроен корректно, вы увидите страницу с таблицами. Обратите внимание: после вызова phpinfo() не нужно добавлять exit — функция сама завершает вывод.

Существует также консольный вариант: php -i из командной строки. Он выводит ту же информацию в текстовом виде, что удобно для grep-фильтрации.

Какие секции содержит вывод phpinfo()?

Вывод делится на несколько крупных блоков. Вот основные из них:

  • PHP Version — номер версии и дата сборки.
  • System — информация об операционной системе и веб-сервере.
  • Build Date — когда был скомпилирован PHP.
  • Server API — например, Apache 2.0 Handler, CGI/FastCGI, FPM.
  • Configuration File (php.ini) Path — путь к загруженному файлу конфигурации.
  • Loaded Configuration File — какой именно php.ini используется (может отличаться от пути по умолчанию).
  • PHP Credits — список разработчиков.
  • PHP Logo Guid — GUID для проверки подлинности логотипа.
  • PHP License — текст лицензии.
  • Configuration — огромная таблица всех директив php.ini с их текущими значениями (Local и Master).
  • Environment — переменные окружения сервера.
  • PHP Variables — суперглобальные массивы: $_SERVER, $_REQUEST, $_ENV и другие.
  • HTTP Headers — заголовки, которые PHP отправил бы по умолчанию.
  • Additional Modules — загруженные расширения (модули).

Каждая секция может быть свёрнута или развёрнута — современные версии PHP выводят страницу с возможностью интерактивного сворачивания блоков через JavaScript.

Разработчик просматривает phpinfo на локальном сервере в браузере

Как прочитать вывод phpinfo()?

Самая полезная часть — таблица Configuration. В ней две колонки: Local Value (значение для текущего контекста — например, для данного виртуального хоста или директории) и Master Value (глобальное значение из php.ini). Если вы меняли параметры через .htaccess или ini_set(), разница между колонками укажет на переопределение.

Для поиска конкретной директивы используйте Ctrl+F. Например, чтобы проверить, включён ли display_errors, найдите строку с этим именем. Обратите внимание на цвет фона строки: зелёный означает, что значение совпадает с рекомендованным, жёлтый — отличается.

Распространённые вопросы (FAQ)

Почему phpinfo() показывает не ту версию PHP?

Чаще всего это происходит, когда на сервере установлено несколько версий PHP, а веб-сервер использует не ту. Проверьте значение Server API — если там указано CGI/FastCGI, значит, PHP запускается как отдельный процесс, и версия может отличаться от консольной. Выполните php -v в терминале — если результат отличается от вывода через браузер, значит, веб-сервер использует другую сборку. Решение — настроить правильный обработчик в конфигурации веб-сервера (например, в Apache через SetHandler или в Nginx через fastcgi_pass).

Как узнать, какие расширения PHP загружены?

Прокрутите вывод до секции Additional Modules или PHP Extensions. Каждое расширение выводится в виде отдельной таблицы со своими настройками. Если расширения нет в списке, его нужно установить через пакетный менеджер (например, apt install php-mbstring) или раскомментировать строку extension=имя.dll в php.ini.

Что означает «Master Value» и «Local Value»?

Master Value — это значение, заданное в основном файле php.ini. Local Value — это значение, которое применяется к текущему контексту выполнения. Контекст может быть изменён через директивы веб-сервера (например, php_admin_value в Apache), через .htaccess, через ini_set() в коде или через настройки пула PHP-FPM. Если Local Value отличается от Master, значит, какое-то переопределение активно.

Как скрыть phpinfo() от посторонних?

Никогда не оставляйте файл info.php в корне рабочего сервера. Если он всё же нужен для диагностики, защитите его паролем через .htaccess:

<Files "info.php">
    Require ip 192.168.1.0/24
</Files>

Или используйте переменную окружения: if ($_ENV['APP_ENV'] === 'local') { phpinfo(); }. В любом случае, после завершения диагностики удалите файл.

Почему phpinfo() не отображается, а браузер скачивает файл?

Это значит, что PHP не обрабатывается веб-сервером. Убедитесь, что установлен модуль PHP (например, libapache2-mod-php для Apache) или настроен PHP-FPM. Проверьте, что файл имеет расширение .php и что в конфигурации сервера прописана обработка этого расширения.

Как вывести только определённую директиву без всей страницы?

Используйте функцию ini_get():

<?php echo ini_get('memory_limit'); ?>

Также можно отфильтровать вывод phpinfo() с помощью флагов: phpinfo(INFO_GENERAL) выведет только общую информацию, phpinfo(INFO_CONFIGURATION) — только таблицу конфигурации. Полный список констант: INFO_GENERAL, INFO_CREDITS, INFO_CONFIGURATION, INFO_MODULES, INFO_ENVIRONMENT, INFO_VARIABLES, INFO_LICENSE, INFO_ALL.

Может ли phpinfo() замедлить сайт?

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

Как получить вывод phpinfo() в переменную?

Используйте буферизацию вывода:

<?php
ob_start();
phpinfo();
$output = ob_get_clean();
?>

Теперь переменная $output содержит HTML-код страницы phpinfo. Это может пригодиться для логирования или отправки техподдержке.

Безопасность при работе с phpinfo()

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

  • Никогда не публикуйте вывод phpinfo() в открытом доступе.
  • Не храните файл info.php на production-сервере.
  • Если нужно поделиться выводом с коллегой, сохраните HTML-страницу локально и отправьте архивом.
  • Настройте веб-сервер так, чтобы файлы с именем, содержащим «info», были недоступны извне (через Deny from all или аналогичные правила).

Перед тем как оставить phpinfo() на рабочем сервере, убедитесь, что доступ к ней закрыт через .htaccess или IP-ограничения. Лучше использовать её только в окружении разработки.