Проверка актуальных параметров PHP на сервере
Основные способы получения статуса PHP
Как получить полную информацию о PHP через веб-интерфейс?
Наиболее универсальный и подробный метод - функция phpinfo(). Она выводит таблицу со всеми настройками, версией, загруженными расширениями, переменными окружения и данными HTTP-заголовков. Это особенно полезно при диагностике несоответствий в конфигурации.
<?php
phpinfo();
?>
Php get status (получение статуса php)
Создать файл info.php в корне сайта и открыть его в браузере. Выводится страница с детальным описанием. После проверки рекомендуется удалить файл из соображений безопасности.
Типичные проблемы:
- Функция может быть отключена директивой disable_functions в php.ini. В этом случае появляется пустая страница или ошибка вызова функции. Решение: временно убрать phpinfo из списка disable_functions в файле конфигурации.
- Данные могут быть неполными, если сервер использует режим cgi-fcgi. В этом случае часть значений берётся из FastCGI-окружения.
Как проверить версию PHP из командной строки?
Когда нет доступа к веб-серверу, используется команда:
php -v
Вывод показывает версию, дату сборки и информацию о лицензии. Позволяет быстро убедиться, что интерпретатор установлен.
Ошибка: команда не найдена. Указывает на отсутствие PHP в переменной PATH или на то, что PHP не установлен. Решение: указать полный путь к бинарному файлу, например /usr/local/bin/php -v.
Как получить сводку настроек и расширений через командную строку?
Команда php -i выводит ту же информацию, что и phpinfo(), только в текстовом формате. Полезна для автоматической обработки.
php -i | grep -i 'php version'
Результат:
PHP Version => 8.1.12
Вывод может быть слишком большим. Для поиска конкретных директив удобно использовать php -i | grep. Однако некоторые настройки могут быть скрыты, если PHP работает в режиме --no-php-ini.
Как проверить список загруженных расширений?
Для проверки конкретного расширения используют extension_loaded():
<?php
if (extension_loaded('mbstring')) {
echo 'mbstring загружено';
} else {
echo 'mbstring не загружено';
}
?>
Для общего списка – get_loaded_extensions():
<?php
$extensions = get_loaded_extensions();
sort($extensions);
foreach ($extensions as $ext) {
echo $ext . '\n';
}
?>
Расширение может быть скомпилировано статически – его имя не появится в выводе php -m (аналог get_loaded_extensions), но оно будет работать. Для статических расширений проверяют раздел 'Configure Command' в phpinfo().
Как узнать, активен ли PHP-FPM?
Служба php-fpm обычно управляется через systemd:
systemctl status php8.1-fpm
Или через сокет:
curl --unix-socket /var/run/php/php8.1-fpm.sock http://localhost/status
Если настроен пул с опцией pm.status_path, то через HTTP запрос можно получить информацию о процессах.
Ошибка Connection refused означает, что сокет не существует или служба не запущена. Проверить статус через systemctl is-active php8.1-fpm.
Как проверить синтаксис PHP-файла без его выполнения?
Команда php -l (lint) проверяет синтаксис без запуска кода:
php -l script.php
Вывод:
No syntax errors detected in script.php
Если файл выполняется через FastCGI, некоторые конструкции могут быть допустимы, но приводить к логическим ошибкам. php -l не выявляет ошибки времени выполнения.
Как получить статус ошибок в PHP-скрипте во время выполнения?
Включить отображение ошибок через error_reporting() и ini_set():
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// далее код
?>
Для получения последней ошибки – error_get_last():
<?php
$error = error_get_last();
if ($error !== null) {
echo 'Ошибка: ' . $error['message'];
}
?>
На production-серверах отображение ошибок следует отключать во избежание утечки информации. Лучше использовать логирование через error_log.
Как проверить версию PHP через HTTP-заголовок?
PHP может добавлять заголовок X-Powered-By. Проверить через curl:
curl -I https://example.com/info.php
Ответ:
X-Powered-By: PHP/8.1.12
Если директива expose_php выключена, заголовок не отправляется. Также заголовок может быть удалён брандмауэром.
Расширенные примеры для более глубокого анализа состояния PHP.
Как извлечь конкретный параметр из phpinfo() в виде структурированных данных?
Использование ob_start() для захвата вывода phpinfo() и последующего парсинга.
<?php
ob_start();
phpinfo(INFO_GENERAL);
$content = ob_get_clean();
// Удаляем HTML-теги, оставляя только текст
$text = strip_tags($content);
// Поиск строки с версией
preg_match('/PHP Version => (\S+)/', $text, $matches);
if (isset($matches[1])) {
echo 'Версия PHP: ' . htmlspecialchars($matches[1]);
} else {
echo 'Не удалось определить версию';
}
?>
Результат:
Версия PHP: 8.1.12
Этот подход позволяет получать любой параметр из таблицы phpinfo без HTML-форматирования.
Как выполнить проверку всех конфигурационных файлов PHP на наличие синтаксических ошибок?
Сканирование ini-файлов с помощью утилиты php -c:
php -c /path/to/php.ini -r 'echo "OK\n";'
Если файл содержит ошибки, PHP выдаст сообщение. Для автоматизированной проверки всех опций можно использовать:
php -r 'parse_ini_file("/etc/php/8.1/cli/php.ini", true); echo "INI-файл корректен";'
При успешном выполнении выводится сообщение. При ошибке парсинга генерируется исключение.
Как проверить статус PHP-FPM с подсчётом активных процессов?
Создать php-скрипт, который подключается к сокету и парсит ответ pm.status_path:
<?php
$sockedPath = '/var/run/php/php8.1-fpm.sock';
$client = stream_socket_client('unix://' . $sockedPath, $errno, $errstr, 30);
if (!$client) {
echo "Ошибка подключения: $errstr ($errno)";
exit;
}
$request = "GET /status HTTP/1.1\r\nHost: localhost\r\n\r\n";
fwrite($client, $request);
$response = '';
while (!feof($client)) {
$response .= fgets($client, 1024);
}
fclose($client);
// Убираем заголовок HTTP
$body = substr($response, strpos($response, "\r\n\r\n") + 4);
// Парсим строки вида: accepted conn: 5
preg_match('/active processes:\s+(\d+)/', $body, $matches);
echo 'Активных процессов: ' . ($matches[1] ?? 'неизвестно');
?>
Результат:
Активных процессов: 12
Как получить список всех констант PHP, связанных с версиями?
Константы PHP_VERSION, PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION и другие. Пример вывода:
<?php
echo "PHP_VERSION: " . PHP_VERSION . "\n";
echo "PHP_MAJOR_VERSION: " . PHP_MAJOR_VERSION . "\n";
echo "PHP_MINOR_VERSION: " . PHP_MINOR_VERSION . "\n";
echo "PHP_RELEASE_VERSION: " . PHP_RELEASE_VERSION . "\n";
echo "PHP_OS: " . PHP_OS . "\n";
?>
Результат:
PHP_VERSION: 8.1.12 PHP_MAJOR_VERSION: 8 PHP_MINOR_VERSION: 1 PHP_RELEASE_VERSION: 12 PHP_OS: Linux
Как проверить, что PHP собран с поддержкой Zend OPcache?
Расширение OPcache часто используется для ускорения. Проверка через вызов opcache_get_status():
<?php
if (function_exists('opcache_get_status')) {
$status = opcache_get_status(false);
if ($status !== false) {
echo 'OPcache включён, использовано памяти: ' . round($status['memory_usage']['used_memory'] / 1024 / 1024, 2) . ' МБ';
} else {
echo 'OPcache выключен';
}
} else {
echo 'OPcache не установлен';
}
?>
Результат:
OPcache включён, использовано памяти: 23.45 МБ
Как сравнить версию PHP с минимально требуемой для приложения?
Использовать version_compare():
<?php
$required = '7.4';
$current = phpversion();
if (version_compare($current, $required, '>=')) {
echo "Версия PHP $current подходит (требуется $required)";
} else {
echo "Требуется обновление PHP до $required (текущая $current)";
}
?>
Результат при текущей 8.1:
Версия PHP 8.1.12 подходит (требуется 7.4)