
Как обновить PHP на Ubuntu: пошаговая инструкция
Чтобы обновить PHP на Ubuntu, подключите PPA ondrej/php, установите нужную версию с расширениями и переключите на неё веб-сервер и CLI.
Как обновить PHP на Ubuntu без простоев и ошибок
Самый надёжный способ обновить PHP на Ubuntu — подключить репозиторий Ondřej Surý (ppa:ondrej/php), установить новую версию вместе с нужными расширениями, переключить на неё веб-сервер и консоль, а старую версию удалить только после проверки.
В статье разобраны версии 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. Чем дольше вы откладываете переход, тем больше разрыв и тем болезненнее будет обновление.
Репозиторий 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
- 01
Закрытые уязвимости: ветки с поддержкой получают патчи безопасности
- 02
Рост скорости выполнения скриптов по сравнению с PHP 7.x
- 03
Современный синтаксис: типизация, enum, readonly-свойства, атрибуты
- 04
Совместимость с новыми версиями фреймворков, CMS и пакетов Composer
- 05
Меньше нагрузки на сервер при том же трафике
- 06
Более понятные сообщения об ошибках и удобная отладка
Подготовка: что сделать до первой команды
Начните с инвентаризации. Выясните текущую версию командой `php -v`, список установленных пакетов — `dpkg -l | grep php`, а список загруженных расширений — `php -m`. Этот список пригодится: после установки новой версии расширения придётся поставить заново, они не переносятся автоматически.
Затем сделайте резервные копии. Скопируйте каталог `/etc/php`, конфигурации Apache или Nginx, файлы сайта и дампы баз данных. Если у вас облачный сервер, создайте снимок диска: это самый быстрый способ откатиться.
И наконец, проверьте совместимость кода. Запустите проект на новой версии в тестовом окружении, посмотрите логи на предупреждения об устаревших функциях (deprecated) и убедитесь, что `composer.json` разрешает новую версию PHP.
Пошаговая установка новой версии PHP на Ubuntu
- 01
Обновите список пакетов и установленные программы: `sudo apt update && sudo apt upgrade -y`.
- 02
Установите утилиту для работы с репозиториями: `sudo apt install software-properties-common -y`.
- 03
Подключите репозиторий: `sudo add-apt-repository ppa:ondrej/php` и подтвердите добавление клавишей Enter.
- 04
Снова обновите индекс пакетов: `sudo apt update`.
- 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.
- 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`.
- 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-задачи, консольные команды фреймворков. На работу сайта через веб-сервер переключение не влияет.
sudo a2dismod php8.1sudo a2enmod php8.3sudo systemctl restart apache2fastcgi_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
Как правильно
- 01
Сравнить `php -m` до и после и доустановить недостающие пакеты
- 02
Проверять конфигурацию командой `nginx -t` и перезагружать сервис
- 03
Держать старую версию 1–2 дня и следить за логами
- 04
Делать снимок сервера и сначала проверять на тестовой копии
- 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, перезагрузите веб-сервер, а причину разберите уже без спешки.
| Задача | Команда | Когда нужна |
|---|---|---|
| Узнать версию PHP | php -v | До и после обновления |
| Список расширений | php -m | Для сверки модулей |
| Установить расширение | sudo apt install php8.3-имя | Если не хватает функции |
| Выбрать версию для CLI | sudo update-alternatives --config php | При нескольких версиях |
| Перезапустить PHP-FPM | sudo 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: рост доли ошибок, падение времени на сайте или всплеск отказов в день обновления — повод сразу заглянуть в логи.
- 01php -v показывает новую версию в консоли
- 02phpinfo() в браузере подтверждает версию веб-сервера
- 03все расширения из старого php -m установлены
- 04параметры php.ini и OPcache перенесены
- 05cron-задачи и воркеры запускаются на новой версии
- 06в логах нет фатальных ошибок за 24 часа
Итоги: как безопасно обновить PHP на Ubuntu
- 01
Подключите ppa:ondrej/php и обновите индекс пакетов
- 02
Установите новую ветку вместе со всеми нужными расширениями
- 03
Переключите Apache или Nginx и CLI на новую версию
- 04
Перенесите настройки php.ini и пулов PHP-FPM
- 05
Проверьте логи и cron, а старую версию удаляйте не сразу
Если на сервере несколько проектов, переводите их на новую версию по очереди: PHP-FPM позволяет держать разные ветки параллельно. Так вы получите актуальную, быструю и защищённую среду без остановки сайтов.
Часто задаваемые вопросы
Подключите репозиторий командой `sudo add-apt-repository ppa:ondrej/php`, выполните `sudo apt update` и установите нужную версию, например `sudo apt install php8.3 php8.3-fpm php8.3-cli`. Затем переключите веб-сервер и консольную версию на новый PHP и проверьте результат командой `php -v`.
Да. Пакеты ставятся параллельно: php8.1, php8.2 и php8.3 не конфликтуют друг с другом. Каждая версия имеет свой каталог конфигурации в /etc/php и собственный сервис PHP-FPM, поэтому разные сайты можно перевести на новую версию по очереди.
Чаще всего веб-сервер по-прежнему обращается к сокету старой версии PHP-FPM. Проверьте директиву fastcgi_pass в конфигурации Nginx или активный модуль в Apache, убедитесь, что сервис php8.3-fpm запущен, и перезагрузите веб-сервер.
Обязательно. Сохраните каталог /etc/php, конфигурацию веб-сервера и файлы сайта, а для баз данных сделайте дамп. Если что-то пойдёт не так, вы вернёте рабочее состояние за несколько минут.
Убедитесь, что все сайты работают на новой версии, затем выполните `sudo apt purge 'php8.1*'` и `sudo apt autoremove`. Не удаляйте старую версию в первый же день: пара суток наблюдения за логами избавит от неожиданностей.
Не хотите рисковать продакшеном при обновлении PHP на сервере?
Перенесём ваши сайты на актуальную версию PHP без простоев и потери данных.
Спасибо за заявку!
Мы свяжемся с вами в ближайшее время.
Сотни серверов на Ubuntu уже обновлены



