Top.Mail.Ru

PHP: управление версиями через ondrej PPA на Ubuntu

26
PHP: управление версиями через ondrej PPA на Ubuntu

PPA ondrej/php позволяет устанавливать несколько версий PHP параллельно и переключаться между ними без переустановки системы. Добавить репозиторий — одна команда, установить PHP 8.2 и 8.3 одновременно — ещё две. Ключевой момент который понимают не сразу: смена версии в командной строке и смена версии для сайта — это два отдельных действия.

Зачем нужен ondrej PPA

Стандартные репозитории Ubuntu содержат только одну версию PHP — ту которую выбрали мейнтейнеры дистрибутива при его сборке. Ubuntu 22.04 поставляет PHP 8.1, Ubuntu 20.04 — PHP 7.4. Если нужна другая версия, официальный репозиторий не поможет.

PPA ondrej/php ведёт Ondřej Surý — официальный мейнтейнер PHP-пакетов для Debian и Ubuntu. Репозиторий содержит все актуальные версии PHP (8.2, 8.3, 8.4) и ряд устаревших для поддержки legacy-проектов. Версии устанавливаются параллельно: PHP 8.1, 8.2 и 8.3 могут работать на одном сервере одновременно.

Актуальные версии PHP в 2026 году

Версия Статус Поддержка до
PHP 8.1 EOL / завершена Декабрь 2025
PHP 8.2 Активная ✓ Декабрь 2026
PHP 8.3 Активная ✓ Ноябрь 2027
PHP 8.4 Активная ✓ Ноябрь 2028

Для новых проектов рекомендуется PHP 8.3 или 8.4. PHP 8.1 и ниже не получают патчи безопасности.

Добавление PPA и установка PHP

Добавьте репозиторий:

sudo add-apt-repository ppa:ondrej/php
sudo apt update

Установите нужную версию:

sudo apt install php8.3 -y

Установка с расширениями которые нужны большинству проектов:

sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-curl \
  php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd php8.3-bcmath -y

Проверить установку:

php8.3 --version

Если на сервере уже есть другая версия PHP, обе работают параллельно. Каждая доступна по своему бинарнику: php8.1, php8.2, php8.3.

Смена CLI-версии

update-alternatives управляет тем, какая версия запускается по команде php без суффикса:

sudo update-alternatives --config php

Система покажет список установленных версий с номерами — введите номер нужной и нажмите Enter.

Проверить результат:

php --version

Это нужно для запуска PHP-скриптов из командной строки, cron-задач, деплой-скриптов.

Критичный момент: CLI и веб-сервер — это разные вещи

Вот где большинство сталкивается с непонятной ситуацией: php --version показывает 8.3, а сайт продолжает работать на 8.1.

Объяснение: версия PHP для веб-сервера определяется не CLI, а PHP-FPM (FastCGI Process Manager) или модулем mod_php в Apache. Nginx и Apache не используют CLI-бинарник — они подключаются к PHP через сокет или TCP-порт процесса PHP-FPM.

Соответственно, смена версии для сайта требует отдельных шагов в зависимости от веб-сервера.

Смена версии PHP для Nginx

Nginx работает с PHP через PHP-FPM-сокет. У каждой версии PHP свой сокет: /var/run/php/php8.1-fpm.sock, /var/run/php/php8.3-fpm.sock и так далее.

Шаг 1. Запустите новую версию PHP-FPM и убедитесь что старая тоже работает:

sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm

Проверить активные FPM-процессы:

ls /var/run/php/

Вы увидите сокеты всех запущенных версий.

Шаг 2. Откройте конфиг сайта в Nginx:

sudo nano /etc/nginx/sites-available/example.com

Найдите строку с fastcgi_pass и замените версию:

# Было
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;

# Стало
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;

Шаг 3. Проверьте конфиг и перезагрузите Nginx:

sudo nginx -t && sudo systemctl reload nginx

Шаг 4. Остановите старую версию FPM если она больше не нужна:

sudo systemctl stop php8.1-fpm
sudo systemctl disable php8.1-fpm

Смена версии PHP для Apache

Apache использует модуль mod_php напрямую — без PHP-FPM. Смена версии проще:

sudo a2dismod php8.1
sudo a2enmod php8.3
sudo systemctl restart apache2

Проверить активный модуль:

apache2ctl -M | grep php

Как проверить какая версия PHP реально используется сайтом

php --version показывает CLI-версию, а не веб-версию. Единственный надёжный способ проверить что видит сайт — phpinfo().

Создайте временный файл в корне сайта:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Откройте в браузере: http://ваш-домен/info.php

В первой же строке увидите версию PHP которую использует веб-сервер. После проверки обязательно удалите файл:

sudo rm /var/www/html/info.php

Файл info.php не должен оставаться на production-сервере — он раскрывает детальную информацию о конфигурации системы.

Установка расширений для конкретной версии

Расширения устанавливаются с явным указанием версии:

sudo apt install php8.3-redis
sudo apt install php8.3-imagick
sudo apt install php8.3-intl

Посмотреть все установленные пакеты для версии:

dpkg -l | grep php8.3

Посмотреть загруженные расширения для текущей CLI-версии:

php -m

Расширение для одной версии не влияет на другую — у каждой версии своя директория с конфигами: /etc/php/8.3/.

Настройка php.ini для конкретной версии

Конфигурационные файлы PHP хранятся раздельно по версиям:

/etc/php/8.3/cli/php.ini        — для командной строки
/etc/php/8.3/fpm/php.ini        — для PHP-FPM (веб-сервер)

Частые настройки которые меняют при деплое:

sudo nano /etc/php/8.3/fpm/php.ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 60

После изменений перезапустите PHP-FPM:

sudo systemctl restart php8.3-fpm

Часто задаваемые вопросы

Почему php —version показывает новую версию а сайт работает на старой?

Потому что CLI и веб-сервер используют разные механизмы. php --version показывает версию для командной строки. Сайт работает через PHP-FPM — отдельный процесс, который Nginx или Apache запрашивает через сокет. Чтобы переключить версию для сайта, нужно изменить сокет в конфиге Nginx или сменить активный модуль в Apache.

Можно ли запускать несколько версий PHP одновременно для разных сайтов?

Да. На одном сервере можно запустить php8.2-fpm и php8.3-fpm одновременно. В конфиге каждого сайта в Nginx указывается нужный сокет — один сайт использует php8.2-fpm.sock, другой php8.3-fpm.sock.

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

Сначала убедитесь что ни один сайт её не использует, затем остановите FPM и удалите пакеты:

sudo systemctl stop php8.1-fpm
sudo apt remove --purge "php8.1*" -y
sudo apt autoremove -y

Какую версию PHP выбрать для нового проекта в 2026 году?

PHP 8.3 или 8.4 — оба получают активную поддержку. PHP 8.4 — новейшая, но некоторые CMS и фреймворки могут ещё не поддерживать её полностью. PHP 8.3 — надёжный выбор с гарантированной поддержкой до ноября 2027.

Нужно ли перезагружать сервер после смены версии PHP?

Нет. Достаточно перезапустить PHP-FPM для нужной версии и перезагрузить Nginx: sudo systemctl restart php8.3-fpm && sudo systemctl reload nginx. Сервер при этом не перезагружается.

PHP с нужными расширениями и несколькими активными версиями лучше всего работает на VPS — там можно управлять FPM-процессами и конфигурацией без ограничений хостинга. На UFO.Hosting VPS разворачиваются с Ubuntu 22.04 или 24.04, где ondrej PPA подключается за одну команду.

PPA ondrej/php: launchpad.net/~ondrej/+archive/ubuntu/php

Похожее

Все статьи
swap linux

Swap-файл в Linux: как добавить и настроить на VPS

Swap-файл — это область на диске которую Linux использует как дополнительную оперативную память когда физическая RAM заканчивается. Создаётся за 5 команд и не требует перераздела диска. На VPS с 1-2 ГБ RAM swap защищает от OOM Killer — ситуации когда…

cron linux

Cron в Linux: автоматизация задач — полное руководство

Cron — планировщик задач в Linux, который запускает команды и скрипты по расписанию. Чтобы добавить задачу, достаточно одной строки в специальном файле — crontab. После сохранения cron подхватывает изменения автоматически и больше не требует вашего участия. Как работает cron Демон…