Как установить или обновить PHP 8.3 на Ubuntu и Debian

Источник: «How to install or upgrade to PHP 8.3 on Ubuntu and Debian»
Полное руководство по установке или обновлению до PHP 8.3 на Ubuntu 22.04 (Jammy), Ubuntu 20.04 (Focal) и Debian 12 (Bookworm), Debian 11 (Bullseye), Debian 10 (Buster).

PHP 8.3 — это новое крупное обновление PHP 2023 года. В нем появились такие новые возможности, как типизированные константы классов, новый набор исключений в расширении DateTime, новая функция json_validate, а также ряд новых возможностей, изменений и исправлений. Как всегда, в PHP 8.3 исправлен ряд ошибок и улучшений, и также улучшена производительность.

Также доступно аналогичное руководство по установке/обновлению PHP 8.3 на RHEL/Fedora/CentOS Stream/Alma/Rocky Linux.

В этой статье рассказывается об установке PHP 8.3 на современные системы Debian и Ubuntu. Аналогичным образом можно установить и некоторые из наиболее популярных расширений PECL, которые перечислены в разделе Установка расширений PECL.

Быстрый старт

В терминале от имени пользователя с правами sudo выполните следующие команды для Debian или Ubuntu. Для получения подробных инструкций перейдите в подробное руководство по установке/обновлению.

Установка PHP 8.3 на Debian 10, 11 или 12

# Сохраняем существующий список пакетов php в файл packages.txt
sudo dpkg -l | grep php | tee packages.txt

# Добавляем репозиторий Ondrej и ключ подписи вместе с зависимостями
sudo apt install apt-transport-https
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update

# Устанавливаем новые пакеты
sudo apt install php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl}

# Устанавливаем FPM или модуль Apache
sudo apt install php8.3-fpm
# Или
# sudo apt install libapache2-mod-php8.3

# На Apache: Включаем PHP 8.3 FPM
sudo a2enconf php8.3-fpm
# При обновлении с более старой версии PHP:
sudo a2disconf php8.2-fpm

# Удаляем PHP 8.2 и старые пакеты
sudo apt purge php8.2*

Установка PHP 8.3 на Ubuntu 20.04, 22.04 или 22.04

## Сохраняем существующий список пакетов php в файл packages.txt
sudo dpkg -l | grep php | tee packages.txt

# Добавляем Ondrej PPA
sudo add-apt-repository ppa:ondrej/php # Нажмите Enter когда спросит.
sudo apt update

# Устанавливаем PHP 8.3 и новые пакеты
sudo apt install php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl}

# Устанавливаем FPM или модуль Apache
sudo apt install php8.3-fpm
# Или
# sudo apt install libapache2-mod-php8.2

# На Apache: Включаем PHP 8.3 FPM
sudo a2enconf php8.3-fpm
# При обновлении с более старой версии PHP:
sudo a2disconf php8.2-fpm

## Удаляем PHp 8.2 и старые пакеты
sudo apt purge php8.2*

Подробные шаги по установке PHP 8.3

1. Предварительные условия

Ни одна из текущих версий Debian и Ubuntu не включает PHP 8.3 в свои репозитории по умолчанию. Предварительно собранные пакеты PHP доступны из репозитория, поддерживаемого Ondřej Surý, который используется в этой статье. Пакеты в этом репозитории имеют ту же конфигурацию пакетов, имена пакетов и конфигурацию systemd, что и пакеты PHP, предоставляемые репозиториями программного обеспечения ОС.

Эта статья рассматривает Ubuntu 22.04 (Jammy), Ubuntu 20.04 (Focal), Ubuntu 24.04 (Noble), Debian 10 (Buster), Debian 11 (Bullseye) и Debian 12 (Bookworm).

Внимание: Предстоят потенциально деструктивные действия! Следующие действия выполняются с правами sudo и требуют этого уровня прав для продолжения. Обычные предупреждения при внесении любых общесистемных изменений применимы и здесь. Обязательно сделайте резервную копию системы и проверьте резервные копии, прежде чем продолжать. При обновлении не забудьте перенести конфигурацию на новую версию PHP.

2. Составьте и сохраните список имеющихся пакетов PHP

При обновлении существующей версии PHP следующая команда выводит список всех установленных пакетов со словом php в имени пакета и сохраняет его в файл packages.txt, также как он выводится в терминале.

Это поможет установить соответствующие пакеты PHP 8.3 на последующих шагах.

Этот шаг не требуется при установке PHP на новую систему.

dpkg -l | grep php | tee packages.txt

3. Добавьте репозиторий ondrej/php

PHP 8.3 не доступен для загрузки ни из одного текущего репозитория ПО Debian или Ubuntu. Репозитории Debian и Ubuntu, поддерживаемые Ondřej Surý, содержат основные пакеты PHP 8.3 и несколько популярных пакетов PECL в актуальном состоянии.

На Ubuntu пакеты собираются только в LTS-версиях. Этот шаг не будет выполнен на версиях Ubuntu, не относящихся к LTS, например Ubuntu 22.10.

Следующие команды добавляют репозиторий в список репозиториев программного обеспечения и запускают apt update для получения списка пакетов, доступных из нового и существующих репозиториев.

Debian:

sudo apt install apt-transport-https
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update

Ubuntu:

sudo add-apt-repository ppa:ondrej/php # Нажмите Enter когда спросит.
sudo apt update

4. Установите новые пакеты PHP 8.3

С добавлением PHP репозитория от Ondrej пакеты PHP можно теперь устанавливать с помощью apt. Все пакеты PHP 8.3 следуют шаблону php8.3-XYZ. Эти имена совпадают и переопределяют версии PHP, предоставляемые собственными репозиториями программного обеспечения ОС.

sudo apt install php8.3-common php8.3-cli php8.3-fpm php8.3-{curl,bz2,mbstring,intl}

5. Дополнительные PHP расширения

Несколько расширений PECL также доступны в репозитории для удобной установки без необходимости их компиляции. Сюда входят некоторые из наиболее популярных расширений PECL, такие, как Image Magick, APCu и Xdebug.

Ниже перечислены некоторые расширения PECL и названия их пакетов, которые можно установить с помощью apt install.

Имя расширенияИмя пакета
Xdebugphp8.3-xdebug
Redisphp8.3-redis
PCovphp8.3-pcov
Image Magickphp8.3-imagick
APCuphp8.3-apcu

Обратите внимание, что эти расширения PECL разрабатываются отдельными разработчиками/командами и могут быть не так хорошо протестированы. Также может потребоваться некоторое время для загрузки этих пакетов в ожидании исправлений совместимости от соответствующих разработчиков расширений.

Далее выполняется простой поиск по apt:

sudo apt search php8.3-apcu # Поиск "apcu" в PHP 8.3

Файл packages.txt, созданный на шаге #2, пригодится вам для поиска существующих пакетов PHP.

6. Интеграция с веб-сервером

В большинстве случаев PHP интегрируется с веб-сервером. Интеграция с PHP-FPM по протоколу Fast CGI является наиболее распространённым подходом, но также возможна интеграция PHP с другими SAPI.

Веб-сервер Apache

При установке пакета php8.3-fpm, если присутствует веб-сервер Apache (apache2), появится новый файл php8.3-fpm.conf, который позволяет удобно переключать интеграцию PHP 8.3:

sudo a2enconf php8.3-fpm
sudo a2disconf php8.2-fpm # При обновлении с более старой версии PHP
sudo systemctl restart apache2

Если Apache настроен на выполнение PHP в качестве модуля Apache (обычно называемого mod_php или mod_php8), установите пакет libapache2-mod-php8.3 вместо php8.3-fpm:

sudo apt install libapache2-mod-php8.3
sudo a2enmod php8.3
sudo a2dismod php8.2 # При обновлении с более старой версии PHP
sudo systemctl restart apache2

Nginx, Caddy, Litespeed и другие серверы с поддержкой Fast CGI

php8.3-fpm устанавливает PHP-FPM и регистрирует службу systemd для PHP 8.3 FPM по адресу сокета /run/php/php8.3-fpm.sock.

Для веб-серверов, интегрирующихся с PHP через Fast CGI, измените/настройте путь к сокету UNIX на этот адрес сокета UNIX.

Например, в Nginx для этого нужно изменить директиву fastcgi_pass:

-fastcgi_pass unix:/run/php/php8.2-fpm.sock;
+fastcgi_pass unix:/run/php/php8.3-fpm.sock;

7. Тестирование установки PHP 8.3

После установки всех пакетов наступает момент истины, когда нужно проверить, успешно ли прошла новая установка.

Запуск php -v в терминале должен показать что-то вроде этого:

$ php -v
PHP 8.3.0 (cli) (built: Nov 24 2023 08:49:45) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend Technologies
with Zend OPcache v8.3.0, Copyright (c), by Zend Technologies

Список модулей можно получить с помощью команды php -m. Этот список будет включать несколько расширений PHP. См. раздел Перенос конфигурации по поводу переноса директив PHP INI и включённых расширений на новые версии PHP.

8. Перенос конфигурации

Этот шаг применим только при обновлении до PHP 8.3 с более старой версии PHP.

Конфигурационные файлы для новой установки PHP 8.3 находятся в каталоге /etc/php/8.3. Существующие установки PHP также должны находиться в каталоге /etc/php.

Не копируйте существующие файлы PHP INI в /etc/php/8.3. Вместо этого сравните два соответствующих файла PHP INI и обновляйте вариант PHP 8.3 только при необходимости.

При использовании PHP-FPM убедитесь, что реплицировано нужное количество процессов FPM и моделей процессов.

Скрипты phpenmod и phpdismod предоставляют переключатели для модулей PHP. Например, ниже отключается расширение phar для FPM на PHP 8.3:

sudo phpdismod -v 8.3 -s fpm phar

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

sudo systemctl restart php8.3-fpm

9. Удаление старых версий PHP

Этот шаг применим только при обновлении до PHP 8.3 с более старой версии PHP.

Для удаления старых версий PHP запустите команду apt purge с префиксом версии PHP. Например, ниже удалены пакеты и конфигурация для PHP 8.2:

sudo apt purge php8.2*

Запуск PHP 8.3 вместе с другими версиями

Возможна установка PHP 8.3 вместе с другими версиями PHP. Именно это и происходит при установке PHP 8.3 без предварительного удаления старых PHP пакетов.

По умолчанию все пакеты phpX.Y-cli устанавливают двоичный файл PHP CLI по адресу /usr/bin/phpX.Y. Это означает, что при установке PHP 8.3 любое приложение, вызывающее PHP CLI как php, будет использовать последний установленный бинарник PHP-CLI (в данном случае PHP 8.3). При использовании нескольких версий PHP убедитесь, что вы вызываете нужный бинарник PHP, напрямую обращаясь к исполняемому файлу /usr/bin/phpX.Y. PHP 8.3 можно напрямую вызвать как /usr/bin/php8.3.

По умолчанию имя php будет ссылаться на последнюю версию PHP, но можно изменить путь, на который по умолчанию ссылается команда php. Используйте команду update-alternatives, чтобы изменить путь, на который должна ссылаться команда php.

sudo update-alternatives --config php

В результате появится приглашение позволяющее интерактивно выбрать альтернативный путь к бинарному файлу PHP, на который указывает php.

There are 4 choices for the alternative php (providing /usr/bin/php).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/php8.3 83 auto mode
1 /usr/bin/php7.4 74 manual mode
2 /usr/bin/php8.1 81 manual mode
3 /usr/bin/php8.2 82 manual mode
4 /usr/bin/php8.3 83 manual mode

Press <enter> to keep the current choice[*], or type selection number:

Чтобы задать путь без интерактивного приглашения:

update-alternatives --set php /usr/bin/php8.3

Дополнительные материалы

Предыдущая Статья

Удивительная проблема с Auth user и тестами

Следующая Статья

Как установить или обновить PHP 8.3 на Fedora, RHEL, CentOS