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: как добавить и настроить на VPS
Swap-файл — это область на диске которую Linux использует как дополнительную оперативную память когда физическая RAM заканчивается. Создаётся за 5 команд и не требует перераздела диска. На VPS с 1-2 ГБ RAM swap защищает от OOM Killer — ситуации когда…
Cron в Linux: автоматизация задач — полное руководство
Cron — планировщик задач в Linux, который запускает команды и скрипты по расписанию. Чтобы добавить задачу, достаточно одной строки в специальном файле — crontab. После сохранения cron подхватывает изменения автоматически и больше не требует вашего участия. Как работает cron Демон…