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

Источник: «How to install or upgrade to PHP 8.3 on Fedora, RHEL, CentOS, and more»
Полное руководство по установке или обновлению PHP 8.3 на Fedora, RHEL, CentOS, Alma Linux, Rocky Linux и другие.

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

В этой статье рассказывается о том, как установить PHP 8.3 на современные системы Fedora, Red Hat Enterprise Linux и другие системы, бинарно совместимые с RHEL, такие, как CentOS Stream, Alma Linux и Rocky Linux. В статье используется репозиторий, поддерживаемый Реми Колле (Remi Collet), который поддерживает пакеты PHP на этих системах уже более десяти лет.

Также доступно аналогичное руководство по обновлению/установке PHP 8.3 на Debian и Ubuntu.

При этом PHP 8.3 устанавливается как Software Collection, и несколько версий PHP могут сосуществовать в одной системе.

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

В терминале от имени пользователя с правами sudo выполните следующие команды для Fedora или RHEL/Alma/Rocky/CentOS Stream. Для получения подробной информации перейдите к следующей части руководства Подробные шаги по установке PHP 8.3.

Установка PHP 8.3 на Fedora 37, 38 и 39

# Сохранение существующего списка пакетов php в файл packages.txt
sudo dnf list installed | grep php | tee packages.txt

# Добавление репозитория Реми
sudo dnf install https://rpms.remirepo.net/fedora/remi-release-$(cut -d ' ' -f 3 /etc/fedora-release).rpm
sudo dnf config-manager --set-enabled remi

# Установка PHP 8.3 и новых пакетов
sudo dnf install php83 php83-php-fpm

# Удаление PHP 8.2 и старых пакетов
sudo dnf remove php82*

# Создание символической ссылки с `php` на реальный бинарный файл PHP
sudo dnf install php83-syspaths -y

Установка PHP 8.3 на RHEL/Alma/Rocky/CentOS и т.д.

Требуется RHEL 8.8 или 9.2, или версии Alma/Rocky/CentOS Stream/EL на базе Enterprise Linux 8 или 9.

# Сохранение существующего списка пакетов php в файл packages.txt
sudo dnf list installed | grep php | tee packages.txt

# Добавление репозитория Реми
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(cut -d ' ' -f 4 /etc/redhat-release | cut -d '.' -f 1).noarch.rpm -y
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-$(cut -d ' ' -f 4 /etc/redhat-release | cut -d '.' -f 1).rpm -y

# Установка PHP 8.3 и новых пакетов
sudo dnf install php83 php83-php-fpm

# Удаление PHP 8.2 и старых пакетов
sudo dnf remove php82*

# Создание символической ссылки с `php` на реальный бинарный файл PHP
sudo dnf install php83-syspaths -y

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

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

Шаги, перечисленные в этом руководстве, должны работать с Fedora 37, 38 и 39, RHEL 8.8 и 9.2, а также с производными Enterprise Linux, такими как Alma, Rocky, CentOS Stream и т.д., основанными на EL 8 и 9.

Внимание: Далее следуют потенциально деструктивные действия.

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

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

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

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

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

sudo dnf list installed | grep php | tee packages.txt

3. Добавьте репозиторий Remi

Первой версией Fedora, содержащей PHP 8.3 по умолчанию, будет Fedora 40. Это означает, что для Fedora 37-39 PHP должен быть скомпилирован из исходного кода или взят из внешнего репозитория. На Fedora 40 и более поздних версиях этот шаг не потребуется.

В RHEL и производных версиях, основанных на Enterprise Linux 8 или 9, в репозиториях по умолчанию также нет пакетов PHP 8.3.

Remi Collect поддерживает несколько репозиториев для Fedora, RHEL и Enterprise Linux (Alma, Rocky, CentOS и т.д. совместимы с EL), которые включают PHP 8.3 и несколько расширений PECL. В этой статье объясняется, как добавить соответствующий репозиторий и использовать пакеты, доступные в репозитории Remi.

Следующие команды добавляют репозиторий в список программных репозиториев для dnf. Они не перезаписывают другие пакеты PHP на разных версиях PHP. Возможно сосуществование нескольких версий PHP. Дополнительную информацию смотрите в разделе Запуск PHP 8.3 вместе с другими версиями.

Fedora 37, 38, and 39

sudo dnf install https://rpms.remirepo.net/fedora/remi-release-$(cut -d ' ' -f 3 /etc/fedora-release).rpm
sudo dnf config-manager --set-enabled remi

RHEL/Alma/Rocky/CentOS/etc

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(cut -d ' ' -f 4 /etc/redhat-release | cut -d '.' -f 1).noarch.rpm -y
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-$(cut -d ' ' -f 4 /etc/redhat-release | cut -d '.' -f 1).rpm -y

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

После добавления и подключения репозитория Remi пакеты PHP можно установить с помощью dnf. Основной пакет php83 устанавливает общие расширения PHP, а также PHP CLI. Дополнительные расширения (включая расширения PECL) устанавливаются по схеме php83-php-XYZ, где XYZ — имя расширения.

sudo dnf install php83 php83-php-fpm

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

Основной пакет php83 устанавливает несколько расширений PHP, таких, как FPM, PDO, Opcache, XML и Sodium. Репозиторий Remi содержит несколько расширений ядра PHP и расширений PECL, которые можно легко установить с помощью dnf.

Расширения PHP Core используют шаблон именования php83-php-XYZ, а расширения PECL именуются php83-php-pecl-XYZ. Когда нет коллизий в именах, расширения PECL также доступны по префиксу php83-php.

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

Имя расширенияИмя пакета
Intlphp83-php-intl
BCMathphp83-php-bcmath
Xdebugphp83-php-pecl-xdebug
Redisphp83-php-pecl-redis
PCovphp83-php-pecl-pcov
Image Magickphp83-php-pecl-imagick
APCuphp83-php-pecl-apcu
sudo dnf install php83-php-pecl-xdebug

Далее приводится простой поиск по dnf:

sudo dnf search php83-php | grep apcu #Поиск расширения "APCu"

Некоторые расширения PECL могут быть недоступны на PHP 8.3, если расширение не компилируется для PHP 8.3 из-за проблем с совместимостью.

При обновлении используйте файл packages.txt, созданный в шаге #2, чтобы переустановить пакеты PHP 8.3 вместо старой версии PHP.

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

PHP — это язык веб-программирования, поэтому очень часто PHP интегрируется с веб-сервером. Наиболее распространена интеграция с PHP-FPM по протоколу Fast CGI, но также возможна интеграция PHP с другими SAPI и фреймворками, такими как Swoole.

Включение и запуск сервиса PHP 8.3 FPM

Пакет php8.3-php-fpm создаёт необходимые файлы модулей systemd для запуска PHP 8.3 FPM в качестве системного сервиса, но не включает его по умолчанию.

Чтобы включить его автоматический запуск при старте сервера и немедленно запустить службу, выполните следующее:

sudo systemctl enable php83-php-fpm
sudo systemctl start php83-php-fpm

Веб-сервер Apache

При установке пакета php83-php-fpm, если присутствует веб-сервер Apache (apache2), будет создан новый файл /etc/httpd/conf.d/php83-php.conf, в котором удобно автоматически включить поддержку PHP.

При обновлении с существующей версии PHP обязательно удалите старые файлы phpXX-php.conf из каталога /etc/httpd/conf.d.

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

Адрес сокета UNIX по умолчанию для PHP 8.3-FPM из репозитория Remi — /var/opt/remi/php83/run/php-fpm/www.sock

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

-fastcgi_pass unix:/var/opt/remi/php82/run/php-fpm/www.sock;
+fastcgi_pass unix:/var/opt/remi/php83/run/php-fpm/www.sock;

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

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

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

$ php -v
PHP 8.3.0 (cli) (built: Nov 21 2023 14:40:35) (NTS gcc x86_64)
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 8.3 CLI из php.

Смотрите раздел Запуск PHP 8.3 вместе с другими версиями для вызова PHP 8.3 CLI из команды php. Поскольку это руководство поощряет возможность установки нескольких версий PHP рядом друг с другом, PHP 8.3 CLI по умолчанию вызывается как php83.

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

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

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

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

Не копируйте существующие файлы PHP INI в /etc/opt/remi/php83. Хотя это может сработать при обновлении с PHP 8.2 или более поздней версии, рекомендуется вручную копировать INI директивы.

При использовании PHP-FPM убедитесь, что воспроизведено правильное количество процессов FPM и моделей процессов (например, в файле /etc/opt/remi/php83/php-fpm.d/www.conf).

Загрузочные файлы для расширений PHP находятся по адресу /etc/opt/remi/php83/php.d. Удаление файла приведёт к отключению соответствующего расширения PHP.

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

sudo systemctl restart php8.3-fpm

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

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

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

sudo dnf remove php82*

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

В этой статье мы намеренно избегаем перезаписи существующих пакетов PHP, устанавливая пакеты PHP 8.3 с префиксом php83. Таким образом, можно установить и запустить несколько версий PHP одновременно.

В Linux-системах PHP-FPM работает как UNIX-сокет, причём для каждой версии PHP используется свой адрес сокета. Также возможно наличие нескольких процессов PHP FPM, и веб-сервер может выборочно использовать различные версии PHP для разных контекстов (например, PHP 8.3 для example.com, а PHP 8.2 для example.net).

Двоичные файлы PHP CLI доступны глобально с php83, что также способствует одновременному запуску нескольких версий PHP CLI.

Глобально исполняемый php

Некоторые скрипты могут потребовать, чтобы PHP CLI присутствовал в виде php. Установка пакета php83-syspaths из dnf автоматически создаёт символическую ссылку из /usr/bin/php на фактический исполняемый файл PHP 8.3 CLI, что позволяет решить эту задачу.

Установка пакета php83-syspaths при наличии другого пакета phpXY-syspaths приведёт к ошибке установки DNF из-за конфликта, пытающегося претендовать на символическую ссылку /usr/bin/php. Удалите другие пакеты syspaths, прежде чем пытаться установить php83-syspaths.

dnf remove php82-syspaths
dnf install php83-syspaths

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

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

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

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

Как установить/обновить PHP 8.3 на MacOS с помощью Homebrew