- Как обновить PHP 8.1 до PHP 8.2 на Ubuntu 22.04 с Nginx
- Предпосылки#
- 1. Список установленных пакетов PHP 8.1#
- 2. Установите пакеты PHP 8.2#
- 3. Настройте Nginx#
- 4. Настройте PHP 8.2#
- 5. Проверьте установку#
- Как установить/обновить PHP 8.1 в Ubuntu/Debian
- Изменения расширений и зависимостей PHP 8.1
- Изменения в директиве INI PHP 8.1
- 1.Перечислите существующие пакеты PHP
- 2. Добавить PPA ondrej/php
- 3. Установите PHP 8.1 и расширения
- 4. Протестируйте установку PHP 8.1
- Очистить старые версии PHP
Как обновить PHP 8.1 до PHP 8.2 на Ubuntu 22.04 с Nginx
PHP 8.2 — это значительное обновление языка PHP, содержащее множество новых функций и оптимизаций. Однако Ubuntu 22.04 LTS включает в свои официальные репозитории только PHP 8.1. В этом руководстве объясняется, как обновить PHP до версии 8.2 и настроить Nginx для его использования.
Предпосылки#
Существующий веб-сайт, работающий с Nginx и PHP 8.1 на сервере Ubuntu 22.04.
Просмотрите руководство по миграции в Руководстве по PHP, чтобы убедиться, что исходный код вашего веб-сайта совместим с PHP 8.2.
1. Список установленных пакетов PHP 8.1#
- Войдите на сервер как пользователь sudo без полномочий root через SSH.
- Перечислите все пакеты PHP 8.1, установленные в вашей системе.
ii php8.1-cli 8.1.3-4ubuntu2.6 amd64 command-line interpreter for the PHP scripting language ii php8.1-common 8.1.3-4ubuntu2.6 amd64 documentation, examples and common module for PHP ii php8.1-curl 8.1.3-4ubuntu2.6 amd64 CURL module for PHP ii php8.1-fpm 8.1.3-4ubuntu2.6 amd64 server-side, HTML-embedded scripting language (FPM-CGI binary) ii php8.1-gd 8.1.3-4ubuntu2.6 amd64 GD module for PHP ii php8.1-json 8.1.3-4ubuntu2.6 amd64 JSON module for PHP ii php8.1-mbstring 8.1.3-4ubuntu2.6 amd64 MBSTRING module for PHP ii php8.1-mysql 8.1.3-4ubuntu2.6 amd64 MySQL module for PHP ii php8.1-opcache 8.1.3-4ubuntu2.6 amd64 Zend OpCache module for PHP
Второй столбец содержит имена установленных пакетов.
- Передайте приведенный выше вывод командам cut , xargs и sed соответственно, чтобы сгенерировать список соответствующих пакетов PHP 8.2.
$ dpkg -l | grep php8.1 | cut -f3 -d' ' | xargs | sed 's/8.1/8.2/g'
Результат выглядит следующим образом:
php8.2-cli php8.2-common php8.2-curl php8.2-fpm php8.2-gd php8.2-json php8.2-mbstring php8.2-mysql php8.2-opcache
Используйте свой вывод при установке PHP 8.2.
$ php-fpm8.1 -m > ~/php-fpm8.1.modules
Вы будете использовать этот файл, чтобы убедиться, что после обновления все модули отсутствуют.
2. Установите пакеты PHP 8.2#
Вы можете установить PHP 8.2 из репозитория ppa:ondrej/php, разработанного Ондржея Сури, который предоставляет последние стабильные версии PHP для систем Ubuntu и Debian.
$ sudo LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
$ sudo apt --simulate install php8.2-
Если вы получаете такую ошибку:
E: Пакет 'php8.2-json' не имеет кандидата на установку
Это означает, что список пакетов содержит виртуальный пакет с именем php8.2-json .
Вам нужно повторно запустить команду моделирования, но на этот раз удалите виртуальный пакет php8.2-json из списка пакетов. Повторяйте до тех пор, пока в списке не останется виртуальных пакетов.
- Установите пакеты PHP 8.2 с уточненным списком. Обратите внимание, что команда установки не содержит опции —simulate .
$ php-fpm8.2 -m > ~/php-fpm8.2.modules
$ diff ~/php-fpm8.1.modules ~/php-fpm8.2.modules
Если вы получаете пустой вывод, это означает, что после обновления не пропало ни одного модуля.
3. Настройте Nginx#
Nginx и PHP-FPM 8.1 взаимодействуют друг с другом через сокет, созданный PHP-FPM 8.1. Поэтому, чтобы переключиться на PHP-FPM 8.2, вам нужно настроить новый сокет для PHP-FPM 8.2 и перенастроить Nginx с этим сокетом.
$ sudo grep -R fastcgi_pass /etc/nginx/sites-enabled/ | grep -Ev '#\s+fastcgi_pass'
Если это сокет Unix, вывод будет выглядеть так:
/etc/nginx/sites-enabled/default: fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
Если это сокет TCP, вывод будет выглядеть так:
/etc/nginx/sites-enabled/default: fastcgi_pass 127.0.0.1:9000;
В обоих случаях /etc/nginx/sites-enabled/default — это файл конфигурации Nginx, который вам нужно отредактировать, а /var/run/php/php8.1-fpm.sock или 127.0.0.1:9000 — это сокет.
У вас может быть другое имя файла или более одного имени файла. Замените default в следующей команде файлами, найденными в вашей системе.
$ sudo mkdir /etc/nginx/sites-backup
$ sudo cp -L /etc/nginx/sites-enabled/* /etc/nginx/sites-backup
- Отредактируйте файл конфигурации, заменив старый сокет новым.
- Если старым сокетом является /var/run/php/php8.1-fpm.sock , новым должен быть /var/run/php/php8.2-fpm.sock .
$ sudo sed -i --follow-symlinks \ 's|php8.1-fpm.sock|php8.2-fpm.sock|g' \ /etc/nginx/sites-enabled/default
$ sudo sed -i --follow-symlinks \ 's|127.0.0.1:9000|127.0.0.1:9001|g' \ /etc/nginx/sites-enabled/default
Перед применением новой конфигурации вам необходимо выполнить следующий раздел для настройки PHP 8.2.
4. Настройте PHP 8.2#
$ sudo cp -rL /etc/php/8.1/fpm/pool.d/* /etc/php/8.2/fpm/pool.d/
- Найдите файл конфигурации, содержащий определение старого сокета.
- Если старый сокет /var/run/php/php8.1-fpm.sock :
$ sudo grep -rl 'php8.1-fpm.sock' /etc/php/8.2/fpm/pool.d
$ sudo grep -rl '127.0.0.1:9000' /etc/php/8.2/fpm/pool.d
В обоих случаях результаты одинаковы, примерно так:
- Отредактируйте файл конфигурации, заменив старый сокет новым.
- Если старый сокет /var/run/php/php8.1-fpm.sock :
$ sudo sed -i 's|php8.1-fpm.sock|php8.2-fpm.sock|g' /etc/php/8.2/fpm/pool.d/www.conf
$ sudo sed -i 's|127.0.0.1:9000|127.0.0.1:9001|g' /etc/php/8.2/fpm/pool.d/www.conf
- Вам также может понадобиться настроить некоторые параметры в основном файле конфигурации PHP 8.2, чтобы они соответствовали требованиям вашего веб-сайта. Общие настройки для большинства веб-сайтов PHP:
max_execution_time memory_limit post_max_size upload_max_filesize date.timezone
Вы можете найти необходимые настройки в основном файле конфигурации PHP 8.1 /etc/php/8.1/fpm/php.ini , а затем скопировать эти настройки в основной файл конфигурации PHP 8.2 /etc/php/8.2/fpm/php.ini .
$ sudo systemctl reload php8.2-fpm.service
$ sudo systemctl reload nginx.service
$ sudo systemctl disable --now php8.1-fpm.service
5. Проверьте установку#
Откройте свой сайт в браузере. Протестируйте и убедитесь, что все функции работают должным образом.
Если вы решили удалить PHP 8.1, сделайте следующее:
$ sudo rm -fr /etc/nginx/sites-backup
Если вам понравился этот пост о том, как установить PHP 8.2 на Ubuntu 22.04, поделитесь им с друзьями в социальных сетях. Спасибо.
Как установить/обновить PHP 8.1 в Ubuntu/Debian
PHP 8.1 уже выпущен с новыми функциями, улучшениями и устаревшими функциональными возможностями.
На сегодняшний момент ни один из текущих репозиториев программного обеспечения Ubuntu или Debian не предлагает PHP 8.1 в своих репозиториях программного обеспечения по умолчанию. Однако Ондржей Сури продолжает делать версии PHP доступными в виде репозитория программного обеспечения Debian/Ubuntu, и теперь доступны пакеты PHP 8.1.
Прежде чем приступить к установке, необходимо ознакомиться со списком изменений и устареванием конфигурационных файлов и расширений.
Изменения расширений и зависимостей PHP 8.1
Расширение Curl поддерживает DNS через HTTPS (DoH), начиная с PHP 8.1. Для этой функции требуется Curl версии 7.62 или более поздней, и она будет недоступна в более старых версиях Debian/Ubuntu, которые не включают в себя версию Curl более позднюю, чем 7.62. Например, эта функция будет недоступна в Ubuntu 18.04.
Изменения в директиве INI PHP 8.1
- функции date_sunrise, date_sunset и соответствующие им настройки INI — устарели
- настройки filter.default и filter.default_options INI — устарели
- Директива auto_detect_line_endings INI — устарела
Итак, приступим к установке PHP 8.1.
1.Перечислите существующие пакеты PHP
При обновлении существующей версии PHP проще перечислить существующие расширения PHP, установленные как пакеты программного обеспечения, чтобы они соответствовали списку расширений PHP 8.1. В системах, которые устанавливают PHP 8.1 заново, этот шаг не требуется.
dpkg -l | grep php | tee packages.txt
Эта команда выводит список всех установленных пакетов PHP, отображает их на экране и сохраняет в файл с именем packages.txt в текущем рабочем каталоге.
2. Добавить PPA ondrej/php
После добавления этого репозитория первоначальную установку и обновления можно выполнить стандартными apt командами.
sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update
sudo apt install apt-transport-https lsb-release ca-certificates wget -y
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update
Приведенные выше шаги добавят PPA в качестве источника пакетов, который содержит все пакеты PHP и их зависимости, такие как argon2 и libzip.
3. Установите PHP 8.1 и расширения
Все пакеты PHP 8.1 следуют шаблону php8.1-NAME. Дополнительные расширения (такие как GD, Curl и т. д.) могут быть установлены так же, в виде наименование программных пакетов (php8.1-gd, php8.1-curl и т. д.).
- php8.1 — это мета-пакет , который коллективно устанавливает несколько зависимостей, таких, как php8.1-cli и php8.1-readline, а также некоторые вспомогательные пакеты.
- php8.1-common — это также мета-пакет, который устанавливает большинство широко используемых расширений PHP за один раз. Он автоматически устанавливает пакет, например php8.1-pdo, php8.1-tokenizer и другие полезные расширения.
sudo apt install php8.1 php8.1-common php8.1-cli -y
Эта команда установит несколько расширений PHP — php8.1-common и CLI для PHP 8.1. После установки, можно проверить наличие установленных модулей, запустив:
php -v # Показать версию PHP .
php -m # Показать установленные и загруженные модули PHP.
Вы можете установить дополнительные расширения по тому же шаблону php8.1-NAME. Обратитесь к файлу packages.txt, чтобы увидеть список существующих пакетов, если вы обновляете существующую систему. Обратите внимание, что начиная с PHP 8.0, расширение JSON входит в комплект и устанавливается неявно.
Пример установки еще нескольких полезных расширений:
Для сред разработки также могут быть установлены инструменты покрытия кода или отладчик Xdebug.
sudo apt install php8.1-pcov # PCOV code coverage tool
sudo apt install php8.1-xdebug # Xdebug debugger
В зависимости от используемого веб-сервера вам потребуется установить дополнительные пакеты для интеграции с веб-сервером.
Для использования Nginx, Litespeed и т.п. устанавливаем php8.1-fpm. Пакет обеспечивает интеграцию с PHP 8.1 через FPM:
sudo apt install php8.1-fpm
Для использования Apache mod_php установите libapache2-mod-php8.1:
sudo apt install libapache2-mod-php8.1
Обратите внимание, что обработчик Apache2 переименован из php7_module в php_module для PHP 8.0. Пакет автоматически настраивает расположение модуля Apache, но если вы обновляете с существующей установки PHP, возможно , потребуется обновление конфигурационных файлов; в частности блоки .
4. Протестируйте установку PHP 8.1
Чтобы убедиться, что все установлено, можно так же проверить установку PHP и расширений, выполните следующие команды:
PHP 8.0.13 (cli) (built: Nov 22 2021 09:50:43) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies
with Zend OPcache v8.0.13, Copyright (c), by Zend Technologies
with Xdebug v3.1.1, Copyright (c) 2002-2021, by Derick Rethans
[PHP Modules]
apcu
calendar
Core
ctype
curl
date
dom
exif
FFI
.
[Zend Modules]
Xdebug
Zend OPcache
Очистить старые версии PHP
Если новая установка работает должным образом, вы можете удалить старые пакеты PHP из системы. Например, если вы используете PHP 8.0 в качестве предыдущей версии, сделать это можно с помощью команды (Осторожно! Не удаляйте старую версию, не убедившись, что ни одно из ваших приложений не использует эту версию):
Запуск PHP 8.1 с другими версиями
Вместо удаления старых версий PHP можно также запускать несколько версий PHP параллельно. Команда update-alternatives обеспечивает простой способ переключения между версиями PHP для PHP CLI.
sudo update-alternatives --config php
Есть 5 вариантов для альтернативы php (предоставляет /usr/bin/php).
Выбор Путь Приор Состояние
------------------------------------------------------------
0 /usr/bin/php8.1 81 автоматический режим
1 /usr/bin/php7.2 72 ручной режим
2 /usr/bin/php7.3 73 ручной режим
3 /usr/bin/php7.4 74 ручной режим
* 4 /usr/bin/php8.0 80 ручной режим
5 /usr/bin/php8.1 81 ручной режим