Как установить или обновить PHP 8.3 на Fedora, RHEL, CentOS
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
- Пакет
php83
устанавливает несколько общих пакетов PHP для популярных расширений PHP. В качестве зависимости устанавливается пакет PHP CLI (php83-php-cli
). php83-php-fpm
устанавливает PHP FPM SAPI для интеграции с веб-сервером. Дополнительную информацию смотрите в разделе Интеграция с веб-сервером.
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
.
Имя расширения | Имя пакета |
---|---|
Intl | php83-php-intl |
BCMath | php83-php-bcmath |
Xdebug | php83-php-pecl-xdebug |
Redis | php83-php-pecl-redis |
PCov | php83-php-pecl-pcov |
Image Magick | php83-php-pecl-imagick |
APCu | php83-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