Как выяснить актуальный номер выпуска PHP на сервере
Способы определения версии PHP
Как быстро узнать версию PHP из командной строки?
Наиболее эффективный способ для администратора - воспользоваться консольной командой php -v. Она выводит информацию о версии интерпретатора и его сборке.
php -v
Пример вывода:
PHP 8.2.12 (cli) (built: Oct 26 2024 10:00:00) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.2.12, Copyright (c) Zend Technologies
Эта команда подходит, когда требуется моментально проверить версию, установленную в системе, особенно при работе через SSH или локальный терминал. Результат включает номер версии, тип сборки (cli, cgi, fpm) и дату компиляции.
Возможные проблемы и их решения:
- Команда не найдена (php: command not found). Причина: PHP не добавлен в переменную окружения PATH либо не установлен. Решение: указать полный путь, например /usr/bin/php -v, или добавить каталог с PHP в PATH.
- Выводится не та версия (например, более старая). Причина: в PATH первым найден другой экземпляр PHP. Решение: использовать полный путь к нужной бинарной сборке, либо выполнить alias php=/usr/local/php8.2/bin/php.
Как программно получить версию PHP через функцию phpversion()?
Внутри PHP-скриптов можно использовать встроенную функцию phpversion(), которая возвращает строку с номером версии текущего интерпретатора.
<?php
echo phpversion();
?>
При запуске этого файла на сервере или через консоль (php script.php) будет выведена версия, например 8.2.12. Способ применяется в скриптах для автоматической проверки совместимости или логирования. Также можно получить версию конкретного расширения, передав его имя: phpversion('mbstring').
Типичные ошибки:
- Вызов функции без параметров возвращает только базовую версию, без деталей сборки. Для полной информации нужно использовать phpinfo().
- Если расширение не загружено, phpversion('extension') возвращает false или пустую строку - требуется предварительная проверка.
Как получить полную информацию о версии через phpinfo()?
Функция phpinfo() выводит подробную страницу со всеми настройками PHP, включая версию, загруженные расширения, переменные окружения и конфигурацию сервера.
<?php
phpinfo();
?>
После открытия этого файла в браузере отображается таблица с параметрами. В первой секции указана версия PHP, билд, дата сборки и архитектура. Способ удобен для диагностики и проверки корректности установки расширений. Функция может быть отключена в php.ini директивой disable_functions.
Возможные сложности:
- Если phpinfo() выводит пустую страницу или приводит к ошибке, значит функция заблокирована. Решение: проверить php.ini и убрать phpinfo из списка disable_functions.
- В консольном режиме вывод очень объёмный. Упростить поиск можно командой php -i | grep -i version.
Как использовать предопределённую константу PHP_VERSION?
PHP предоставляет константу PHP_VERSION, которая содержит строку с номером версии. Она доступна без вызова функций и подходит для быстрых проверок.
<?php
echo PHP_VERSION;
?>
Результат: 8.2.12. Константа удобна в условных конструкциях для проверки минимальной версии, например:
if (PHP_VERSION_ID >= 80100) {
// код для PHP 8.1 и выше
}
PHP_VERSION_ID (например, 80212) - целочисленное представление, упрощающее численные сравнения.
Примечание:
Константа отражает версию только того интерпретатора, который выполняется в данный момент. В случае разных SAPI (CLI, Apache mod_php, FPM) значения могут отличаться.
Как проверить версию с помощью команды php -i?
Команда php -i выводит ту же информацию, что и phpinfo(), но в консоль. Чтобы извлечь только строку с версией, используется grep.
php -i | grep -i "PHP Version"
Вывод:
PHP Version => 8.2.12
Способ полезен при автоматизации (например, в скриптах CI/CD) и когда требуется быстро получить версию в безбраузерной среде. Параметр -i делает поиск регистронезависимым.
Возможные проблемы:
Если вывод команды пустой - PHP не установлен или не в PATH. Также grep может не найти строку, если локаль отличается (используйте LC_ALL=C php -i | grep ...).
Как сравнить версию PHP с требуемой?
Для проверки совместимости приложения или скрипта используется функция version_compare(). Она принимает две версии и оператор сравнения.
if (version_compare(PHP_VERSION, '8.0.0', '>=')) {
echo 'Версия PHP 8.0 или выше';
} else {
echo 'Требуется обновление';
}
Результат при PHP 8.2:
Версия PHP 8.0 или выше
Функция корректно обрабатывает номера с разным количеством сегментов (например, '7.4' и '7.4.33'). Используется в инсталляторах, проверках системных требований и условном включении функционала.
Распространённые ошибки:
- Неправильный порядок аргументов: сначала фактическая версия, затем сравниваемая.
- Неверное указание оператора: следует использовать строки '>=', '<', '==' и т.д.
Как определить версию PHP, если нет доступа к командной строке?
Если доступна только веб-панель или FTP, создаётся файл ver.php с простым скриптом и открывается в браузере.
<?php echo phpversion(); ?>
При обращении к файлу, например http://example.com/ver.php, отобразится номер версии. Аналогично можно вывести полную информацию через <?php phpinfo(); ?>. Метод подходит для виртуального хостинга и случаев, когда пользователь не имеет SSH-доступа.
Меры предосторожности:
- Не рекомендуется оставлять файл с phpinfo() в публичной папке после диагностики, так как он раскрывает детали конфигурации сервера.
- Некоторые хостинг-провайдеры блокируют выполнение phpinfo() из соображений безопасности. В этом случае пригодится простая проверка через echo phpversion().
Расширенные примеры и нетипичные сценарии
1. Получение версии всех загруженных расширений
<?php
foreach (get_loaded_extensions() as $ext) {
echo "$ext: " . phpversion($ext) . "\n";
}
?>
Результат (фрагмент):
Core: 8.2.12 date: 8.2.12 json: 8.2.12 mbstring: 8.2.12 pcre: 8.2.12 ...
Позволяет убедиться, что все необходимые расширения имеют одинаковую версию. Если расширение не загружено, phpversion() вернёт false.
2. Использование PHP_VERSION_ID для проверки минимальной версии
if (PHP_VERSION_ID >= 80000) {
// используем named arguments
echo "PHP 8.0+";
}
Константа PHP_VERSION_ID формируется как major*10000 + minor*100 + release. Например, версии 8.2.12 соответствует 80212. Сравнение чисел надёжнее строк.
3. Определение версии из файла phpinfo через командную строку с форматированием
php -i | awk '/^PHP Version =>/{print $4}'
Вывод:
8.2.12
Если в строке есть двоеточие или знак равенства, awk позволяет извлечь четвёртое поле. Альтернатива с sed:
php -i | sed -n 's/^PHP Version => //p'
4. Получение версии PHP внутри Docker-контейнера
docker exec container_name php -v
Или с помощью простого скрипта внутри контейнера:
docker run --rm php:8.2-cli php -r 'echo phpversion();'
Результат: 8.2.12. Позволяет проверить версию без входа в контейнер.
5. Проверка версии PHP в файле composer.json
composer show --platform-php
Вывод:
php 8.2.12
Если проект использует Composer, эта команда показывает версию PHP, установленную в системе, а также требуемые расширения.
6. Сравнение версий с использованием version_compare и пользовательских версий
$required = '7.4.33';
$actual = phpversion();
if (version_compare($actual, $required, '>=')) {
echo "Система соответствует требованиям ($actual >= $required)";
} else {
echo "Требуется обновление до $required (текущая: $actual)";
}
При PHP 8.2.12 вывод:
Система соответствует требованиям (8.2.12 >= 7.4.33)
7. Получение версии через php -r без создания файла
php -r 'echo phpversion();'
Вывод: 8.2.12. Удобно в скриптах оболочки.
8. Использование постоянной PHP_EXTRA_VERSION (если доступна)
В некоторых сборках может быть определена константа PHP_EXTRA_VERSION (например, для бета-версий).
echo PHP_EXTRA_VERSION; // может вывести '-dev' или '-RC1'
9. Проверка версии через файл php.ini
В php.ini нет прямого указания версии, но можно прочитать информацию из комментариев (обычно в первой строке).
head -1 /etc/php/8.2/cli/php.ini
Вывод:
; Configuration file for PHP 8.2.12
10. Различие версий для разных SAPI
Веб-сервер может использовать модуль PHP, отличный от CLI. Чтобы узнать версию модуля, создайте файл info.php с phpinfo() и найдите в секции Server API. Если это Apache, версия указана как PHP Version. В CLI выполните php -v. Версии могут не совпадать, если установлены разные пакеты (например, php8.2-cli и libapache2-mod-php8.2).