Проверка актуальных параметров 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)

получение статуса PHP - comments

En
Php get status (php)