Варианты получения сведений о 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" или аналогичное значение.