Как обновить PHP на Ubuntu: пошаговая инструкция
Две параллельные трубы на подложке: в левой перекрыт вентиль, из правой выкатывается зелёный шарик

Как обновить PHP на Ubuntu: пошаговая инструкция

Чтобы обновить PHP на Ubuntu, подключите PPA ondrej/php, установите нужную версию с расширениями и переключите на неё веб-сервер и CLI.

Как обновить PHP на Ubuntu без простоев и ошибок

Самый надёжный способ обновить PHP на Ubuntu — подключить репозиторий Ondřej Surý (ppa:ondrej/php), установить новую версию вместе с нужными расширениями, переключить на неё веб-сервер и консоль, а старую версию удалить только после проверки.

Штатная команда apt upgrade не поднимает PHP на следующую минорную версию: в рамках одного релиза Ubuntu вы получаете только исправления безопасности.

В статье разобраны версии PHP в разных релизах Ubuntu, подготовка сервера, пошаговая установка, настройка Apache и Nginx, типичные ошибки и проверка после перехода. Инструкция подходит для Ubuntu 20.04, 22.04 и 24.04.

Зачем вообще обновлять PHP

Каждая ветка PHP живёт ограниченное время. Сначала идёт активная поддержка, когда выходят и исправления ошибок, и патчи безопасности, затем год-два только патчи безопасности, после чего ветка получает статус EOL: уязвимости больше не закрываются. Работать на такой версии — значит оставлять в продакшене известные дыры.

Вторая причина — производительность. Начиная с PHP 8 в движке появился JIT-компилятор, а сам интерпретатор стал заметно быстрее версий 7.x. Для сайта это сокращение времени ответа сервера, а скорость отдачи страниц учитывают и Яндекс, и Google при оценке качества ресурса.

Третья причина — требования библиотек. Современные версии Laravel, Symfony, WordPress-плагинов и пакетов Composer всё чаще отказываются работать на PHP ниже 8.1. Чем дольше вы откладываете переход, тем больше разрыв и тем болезненнее будет обновление.

версии php «из коробки» в ubuntu lts
01 · ubuntu 20.04PHP 7.4ветка снята с поддержки разработчиками PHP в 2022 году
02 · ubuntu 22.04PHP 8.1активная поддержка завершена, остаются только патчи безопасности
03 · ubuntu 24.04PHP 8.3современная ветка, подходит для большинства проектов

Репозиторий Ubuntu или PPA: что выбрать

В стандартных репозиториях Ubuntu для каждого релиза лежит одна основная версия PHP. Она стабильна, получает бэкпорты исправлений безопасности от Canonical, но не обновляется до следующей минорной ветки. Если вам нужна версия новее, чем в вашем релизе, придётся подключать внешний источник.

Де-факто стандартом стал PPA ppa:ondrej/php, который поддерживает Ondřej Surý — мейнтейнер PHP в Debian. В нём одновременно доступны сразу несколько веток: от 7.x до свежих 8.x. Пакеты собраны так же, как официальные, поэтому структура каталогов и сервисов остаётся привычной.

Если ваш проект работает на версии из репозитория Ubuntu и вас всё устраивает, отдельное обновление может быть и не нужно. Но когда требуется конкретная ветка, например 8.3 на Ubuntu 22.04, PPA — самый короткий путь.

Что даёт переход на актуальную версию PHP

  1. 01

    Закрытые уязвимости: ветки с поддержкой получают патчи безопасности

  2. 02

    Рост скорости выполнения скриптов по сравнению с PHP 7.x

  3. 03

    Современный синтаксис: типизация, enum, readonly-свойства, атрибуты

  4. 04

    Совместимость с новыми версиями фреймворков, CMS и пакетов Composer

  5. 05

    Меньше нагрузки на сервер при том же трафике

  6. 06

    Более понятные сообщения об ошибках и удобная отладка

Подготовка: что сделать до первой команды

Начните с инвентаризации. Выясните текущую версию командой `php -v`, список установленных пакетов — `dpkg -l | grep php`, а список загруженных расширений — `php -m`. Этот список пригодится: после установки новой версии расширения придётся поставить заново, они не переносятся автоматически.

Затем сделайте резервные копии. Скопируйте каталог `/etc/php`, конфигурации Apache или Nginx, файлы сайта и дампы баз данных. Если у вас облачный сервер, создайте снимок диска: это самый быстрый способ откатиться.

И наконец, проверьте совместимость кода. Запустите проект на новой версии в тестовом окружении, посмотрите логи на предупреждения об устаревших функциях (deprecated) и убедитесь, что `composer.json` разрешает новую версию PHP.

Пошаговая установка новой версии PHP на Ubuntu

  1. 01

    Обновите список пакетов и установленные программы: `sudo apt update && sudo apt upgrade -y`.

  2. 02

    Установите утилиту для работы с репозиториями: `sudo apt install software-properties-common -y`.

  3. 03

    Подключите репозиторий: `sudo add-apt-repository ppa:ondrej/php` и подтвердите добавление клавишей Enter.

  4. 04

    Снова обновите индекс пакетов: `sudo apt update`.

  5. 05

    Установите PHP нужной ветки, например 8.3: `sudo apt install php8.3 php8.3-cli php8.3-fpm`. Для Apache с mod_php вместо php8.3-fpm достаточно пакета libapache2-mod-php8.3.

  6. 06

    Поставьте расширения, которые использовал проект: `sudo apt install php8.3-mysql php8.3-xml php8.3-mbstring php8.3-curl php8.3-zip php8.3-gd php8.3-intl`.

  7. 07

    Проверьте результат: `php8.3 -v` покажет новую версию, а `systemctl status php8.3-fpm` — состояние сервиса.

Расширения и версия PHP в консоли

Самая частая причина неработающего сайта после обновления — потерянные расширения. Сверьте вывод `php -m` на старой и новой версии и доустановите недостающие пакеты по шаблону `php8.3-имя`. Для базы данных это php8.3-mysql или php8.3-pgsql, для обработки изображений — php8.3-gd или php8.3-imagick, для интернационализации — php8.3-intl.

Когда на сервере стоит несколько версий, команда `php` в терминале может по-прежнему запускать старую. Переключить её можно через систему альтернатив: `sudo update-alternatives --config php` покажет список установленных версий и предложит выбрать нужную. Это влияет только на CLI: Composer, cron-задачи, консольные команды фреймворков. На работу сайта через веб-сервер переключение не влияет.

переключение веб-сервера на новый php
a · apache + mod_php
Модуль вместо сокета
sudo a2dismod php8.1sudo a2enmod php8.3sudo systemctl restart apache2
b · nginx + php-fpm
Новый сокет в конфигурации
fastcgi_pass unix:/run/php/php8.3-fpm.sock;sudo nginx -tsudo systemctl reload nginx

Проверка после переключения

Не ограничивайтесь командой `php -v`: она показывает версию CLI, а не ту, что обрабатывает запросы сайта. Создайте временный файл с вызовом `phpinfo()`, откройте его в браузере, убедитесь, что в поле PHP Version указана новая ветка, и сразу удалите файл — в открытом доступе он раскрывает слишком много информации о сервере.

После этого просмотрите логи: `/var/log/nginx/error.log` или `/var/log/apache2/error.log`, а также журнал PHP-FPM. Обратите внимание на предупреждения Deprecated и фатальные ошибки об отсутствующих функциях — они подскажут, каких расширений не хватает.

Отдельно настройте php.ini. Конфигурация новой версии лежит в собственном каталоге, например `/etc/php/8.3/fpm/php.ini`, и не наследует правки старой. Перенесите значения memory_limit, upload_max_filesize, post_max_size, max_execution_time и настройки OPcache вручную.

Типичные ошибки при обновлении PHP на Ubuntu

Большинство проблем возникает не из-за самой установки, а из-за пропущенных мелких шагов.

Как делают неверно

  • Устанавливают только php8.3 без расширений и получают белый экран
  • Забывают сменить fastcgi_pass и ловят ошибку 502 Bad Gateway
  • Удаляют старую версию сразу, не проверив сайт
  • Обновляют боевой сервер без резервной копии и тестов
  • Не переносят настройки php.ini и пулов PHP-FPM

Как правильно

  1. 01

    Сравнить `php -m` до и после и доустановить недостающие пакеты

  2. 02

    Проверять конфигурацию командой `nginx -t` и перезагружать сервис

  3. 03

    Держать старую версию 1–2 дня и следить за логами

  4. 04

    Делать снимок сервера и сначала проверять на тестовой копии

  5. 05

    Копировать нужные параметры в /etc/php/8.3 и перезапускать php8.3-fpm

Как убрать старую версию PHP

Когда все сайты стабильно работают на новой ветке и в логах нет ошибок, старую версию можно удалять. Остановите её сервис командами `sudo systemctl stop php8.1-fpm` и `sudo systemctl disable php8.1-fpm`, затем выполните `sudo apt purge 'php8.1*'` и `sudo apt autoremove`. Ключ purge удаляет и конфигурационные файлы, поэтому убедитесь, что нужные настройки уже перенесены.

Если что-то пошло не так, откат делается просто: старая версия никуда не делась, пока вы её не удалили. Верните прежний fastcgi_pass или включите прежний модуль Apache, перезагрузите веб-сервер, а причину разберите уже без спешки.

ЗадачаКомандаКогда нужна
Узнать версию PHPphp -vДо и после обновления
Список расширенийphp -mДля сверки модулей
Установить расширениеsudo apt install php8.3-имяЕсли не хватает функции
Выбрать версию для CLIsudo update-alternatives --config phpПри нескольких версиях
Перезапустить PHP-FPMsudo systemctl restart php8.3-fpmПосле правки php.ini
Удалить старую веткуsudo apt purge 'php8.1*'После проверки сайтов

Что проверить в проекте

Если проект использует Composer, выполните `composer check-platform-reqs`: команда покажет, соответствуют ли версия PHP и расширения требованиям зависимостей. Затем запустите `composer install` под новой версией, чтобы убедиться, что все пакеты разрешаются без конфликтов.

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

После выката посмотрите на поведение сайта в Яндекс Метрике и Google Analytics: рост доли ошибок, падение времени на сайте или всплеск отказов в день обновления — повод сразу заглянуть в логи.

чек-лист после обновления php
  • 01php -v показывает новую версию в консоли
  • 02phpinfo() в браузере подтверждает версию веб-сервера
  • 03все расширения из старого php -m установлены
  • 04параметры php.ini и OPcache перенесены
  • 05cron-задачи и воркеры запускаются на новой версии
  • 06в логах нет фатальных ошибок за 24 часа
Для производственных серверов выбирайте ветки PHP, которые ещё получают исправления безопасности. Актуальные сроки поддержки каждой версии указаны на официальном сайте php.net в разделе Supported Versions.

Итоги: как безопасно обновить PHP на Ubuntu

Обновление PHP на Ubuntu — это не одна команда, а последовательность: резервная копия, PPA, установка с расширениями, переключение веб-сервера, проверка и только потом удаление старой версии.
  1. 01

    Подключите ppa:ondrej/php и обновите индекс пакетов

  2. 02

    Установите новую ветку вместе со всеми нужными расширениями

  3. 03

    Переключите Apache или Nginx и CLI на новую версию

  4. 04

    Перенесите настройки php.ini и пулов PHP-FPM

  5. 05

    Проверьте логи и cron, а старую версию удаляйте не сразу

Если на сервере несколько проектов, переводите их на новую версию по очереди: PHP-FPM позволяет держать разные ветки параллельно. Так вы получите актуальную, быструю и защищённую среду без остановки сайтов.

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

Не хотите рисковать продакшеном при обновлении PHP на сервере?

Перенесём ваши сайты на актуальную версию PHP без простоев и потери данных.

Бесплатный аудит сервераРезервная копия заранееБез простоя сайта

Сотни серверов на Ubuntu уже обновлены

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

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

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.