Определение версии PHP: руководство с примерами

Раздел: PHP окружение -> Требования к версии PHP

Определение и управление требуемой версией PHP

Наиболее эффективным способом указания и проверки требуемой версии PHP в проекте является использование файла composer.json менеджера зависимостей Composer. Этот метод позволяет явно задать минимальную или точную версию PHP, а также автоматически проверять её при установке зависимостей или развёртывании.


{
    "require": {
        "php": ">=8.0",
        "ext-json": "*",
        "ext-mbstring": "*"
    }
}
    

В данном примере указана минимальная версия PHP 8.0. Composer проверяет соответствие при каждом запуске composer install или composer update. Если версия не подходит, процесс прерывается с сообщением об ошибке.

Как узнать текущую версию PHP на сервере или в окружении?

Для быстрой проверки используется команда в терминале:

php -v

Вывод покажет версию PHP, например: PHP 8.1.12 (cli). Этот способ удобен для локальной разработки и серверов с прямым доступом к командной строке.

Как вывести полную конфигурацию PHP с помощью скрипта?

Создание файла info.php в корне сайта с одной функцией:

<? phpinfo(); ?>

После открытия файла в браузере отображается детальная информация, включая версию PHP, загруженные расширения, настройки. После проверки файл рекомендуется удалить по соображениям безопасности.

Как программно проверить версию PHP внутри кода?

Используется встроенная функция PHP_VERSION или phpversion():


<?php
echo 'Текущая версия: ' . PHP_VERSION . "\n";
echo 'Версия из функции: ' . phpversion() . "\n";
if (version_compare(PHP_VERSION, '8.0', '>=')) {
    echo "Версия подходит для проекта.";
} else {
    echo "Требуется обновление PHP.";
}
?>
    

Функция version_compare позволяет гибко сравнивать версии по операторам (>=, < и т.д.).

Как ограничить доступ к сайту для неподходящих версий PHP через .htaccess?

На серверах Apache можно добавить в .htaccess проверку версии PHP с помощью модуля IfVersion (если включён):


<IfVersion < 8.0>
    ErrorDocument 403 "Требуется PHP 8.0 или выше"
    Deny from all
</IfVersion>
    

Этот метод возвращает ошибку 403 для посетителей, если версия PHP ниже 8.0.

Как использовать файл .user.ini для установки ограничений?

В PHP 7.0+ поддерживается файл .user.ini, в котором можно задать директивы:


; .user.ini
max_execution_time = 120
memory_limit = 256M
    

Однако напрямую требуемую версию PHP в нём указать нельзя, поэтому этот способ подходит только для настройки параметров, но не для ограничения версии.

Как установить конкретную версию PHP с помощью менеджера пакетов?

Пример для Ubuntu с использованием ppa:ondrej/php:


sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php8.1 php8.1-cli php8.1-common
    

После установки можно переключать версию по умолчанию через update-alternatives.

Как использовать Docker для изоляции версии PHP?

Создание Dockerfile с указанием точного образа:


FROM php:8.2-cli
COPY . /app
WORKDIR /app
CMD ["php", "-S", "0.0.0.0:8000"]
    

Контейнер гарантирует, что приложение работает на указанной версии независимо от хост-системы.

Типичные проблемы и их решения

Проблема: при запуске проекта возникает ошибка "Parse error: syntax error, unexpected token".

Причина: код использует синтаксис более новой версии PHP (например, named arguments), а установлена более старая.

Решение: проверить требуемую версию в composer.json и обновить PHP на сервере или изменить код для совместимости.

Другая частая ошибка - отсутствие расширения, которое было встроено в старую версию, но вынесено в отдельный пакет в новой (например, ext-json).

Решение: установить недостающее расширение через менеджер пакетов или включить его в php.ini.

Расширенные примеры использования

Пример 1: Указание диапазона версий в composer.json

Пример

{
    "require": {
        "php": ">=7.4, <8.3",
        "ext-pdo": "*",
        "ext-xml": "*"
    }
}
composer install
# Output: Your requirements could not be resolved to an installable set of packages.
# Problem 1: - Root composer.json requires php >=7.4 <8.3, but your PHP version (8.3.0) does not satisfy that requirement.

Пример 2: Проверка версии в многосайтовой среде с помощью одного скрипта

Пример

<?php
$required = '8.0.0';
$current = phpversion();
if (version_compare($current, $required, '>=')) {
    echo "Версия $current соответствует требованиям.";
} else {
    echo "Необходима версия $required или выше, установлена $current.";
    exit(1);
}
?>
Версия 8.1.5 соответствует требованиям.

Пример 3: Использование Docker с многоэтапной сборкой и проверкой версии

Пример

FROM php:8.1-cli AS builder
COPY composer.json /app/
WORKDIR /app
RUN composer install --no-dev

FROM php:8.1-cli
COPY --from=builder /app /app
COPY . /app
WORKDIR /app
CMD ["php", "index.php"]
Сборка образа: docker build -t myapp .
Запуск: docker run myapp

Пример 4: Использование .htaccess для перенаправления на страницу с сообщением, если версия не подходит

Пример

<IfVersion < 8.0>
    RedirectMatch 301 ^(.*)$ /upgrade-php.html
</IfVersion>
Посетители с PHP < 8.0 будут перенаправлены на /upgrade-php.html, где можно разместить инструкции.

Пример 5: Команда для поиска всех файлов, содержащих функции, доступные только с определённой версии

Пример

grep -r "match (" . --include="*.php"> /dev/null && echo "Найден синтаксис match, требующий PHP 8.0"
Если найдено, выводит предупреждение. Можно использовать как часть CI/CD.

Требуемая версия PHP - comments

En
Required php version (php)