Как установить или обновить PHP 8.3 на Ubuntu и Debian
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}
Пакет
php8.3-common
— это мета-пакет, устанавливающий несколько PHP расширений. Впоследствии можно выборочно отключить отдельные расширения. Расширения ядра PHP, такие, как Date, Phar, JSON, ctype и random, всегда включены в пакет. Нет необходимости и возможности устанавливать их отдельными пакетами.Вместо установки
php8.3-common
можно также установить отдельные пакеты. Установкаphp8.3-common
примерно эквивалентна установке всех расширений, как показано ниже:apt install php8.3-{calendar,ctype,exif,ffi,fileinfo,ftp,gettext,iconv,pdo,phar,posix,shmop,sockets,sysvmsg,sysvsem,sysvshm,tokenizer}
php8.3-cli
устанавливает PHP CLI и выполняет симлинки/usr/bin/php
на/usr/bin/php8.3
. Дополнительную информацию смотрите в разделе Запуск PHP 8.3 вместе с другими версиями.php8.3-fpm
устанавливает PHP FPM SAPI для интеграции с веб-сервером. Альтернативные подходы см. в разделе Интеграция с веб-сервером.
5. Дополнительные PHP расширения
Несколько расширений PECL также доступны в репозитории для удобной установки без необходимости их компиляции. Сюда входят некоторые из наиболее популярных расширений PECL, такие, как Image Magick, APCu и Xdebug.
Ниже перечислены некоторые расширения PECL и названия их пакетов, которые можно установить с помощью apt install
.
Имя расширения | Имя пакета |
---|---|
Xdebug | php8.3-xdebug |
Redis | php8.3-redis |
PCov | php8.3-pcov |
Image Magick | php8.3-imagick |
APCu | php8.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
- Как установить или обновить PHP 8.3 на Fedora, RHEL, CentOS
- Как установить/обновить PHP 8.3 на MacOS с помощью Homebrew