- Как обновить 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.0 (Debian/Ubuntu/Mint)
- Изменения расширений и зависимостей в PHP 8.0
- Изменения в файле INI PHP 8.0
- Установка PHP 8
- Установка PHP8 fpm
- Смена установленной версий 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.0 (Debian/Ubuntu/Mint)
PHP 8.0 содержит много новых функций и улучшений производительности, синтаксиса, безопасности и стабильности. Установка PHP 8.0 практически на любой сервер упрощается благодаря предварительно скомпилированным пакетам, доступным во всех поддерживаемых в настоящее время версиях Debian и Ubuntu.
Изменения расширений и зависимостей в PHP 8.0
Несмотря на огромное количество изменений в PHP 8.0, в принципе было произведено не так много изменений в его зависимостях и структуре расширений.
Расширение JSON теперь всегда доступно , и нет флага компиляции для его исключения. Это означает, что больше нет необходимости явно устанавливать пакет php-json.
Расширение xmlrpc перемещено в PECL по уважительным причинам. Репозитории программного обеспечения, упомянутые в этом посте, не включают xmlrpc расширения для PHP 8.0.
Кроме того, в Windows название расширения GD было изменено с php_gd2.dll на php_gd.dll.
Изменения в файле INI PHP 8.0
Также есть несколько изменений в файле INI.
- По умолчанию утверждения вызывают исключения — ( assert.exception=1)
- Отображение ошибок по умолчанию установлено на E_ALL — ( error_reporting=-1)
- При запуске теперь по умолчанию ошибки включены — ( display_startup_errors=1)
- Новая функция JIT в PHP 8.0 добавляет несколько новых директив INI.
- Параметр zend.exception_string_param_max_len для настраиваемой длины строки трассировки стека исключений
Установка PHP 8
1. Необходимо добавить репозиторий ondrej/phpPPA
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get 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.
2. Установите PHP 8.0 и нужные расширения
Все пакеты PHP 8.0 следуют шаблону php8.0-имя_расширения , и пакет php8.0-common включает необходимый набор расширений по умолчанию.
sudo apt install php8.0-common
Установите PHP 8.0 CLI для работы в консоли
sudo apt install php8.0-cli
Вы можете установить дополнительные расширения по тому же шаблону php8.0-имя_расширения. Обратите внимание, что вам не нужно устанавливать, так php8.0-json, так как теперь он включен по умолчанию.
Пример установки еще нескольких полезных расширений:
Для разработки также могут быть установлены инструменты покрытия кода или отладчик Xdebug.
sudo apt install php8.0-pcov # PCOV code coverage tool
sudo apt install php8.0-xdebug # Xdebug debugger
Установка PHP8 fpm
В зависимости от используемого веб-сервера вам необходимо будет установить дополнительные пакеты для интеграции с веб-сервером.
Для использования Apache mpm_event, Nginx, Litespeed и т. д. нужно будет установить php8.0-fpm
sudo apt install php8.0-fpm
Для использования Apache mod_php установите libapache2-mod-php8.0
sudo apt install libapache2-mod-php8.0
Чтобы проверить установку PHP и расширений, выполните следующие команды:
# php -v
PHP 8.0.0 (cli) (built: Nov 26 2020 18:04:36) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0, Copyright (c) Zend Technologies
# php -m
[PHP Modules]
Core
ctype
curl
.
Если вам потребуется удалить старые пакеты PHP, можно воспользоваться командой
Это предполагает, что вы используете PHP 7.4 в качестве предыдущей версии. Но будьте осторожны, сначала сто раз проверьте что вы больше не используете старые версии в своих проектах.
Смена установленной версий PHP по умолчанию.
Если вдруг вас не устраивает новая установленная версия PHP, вы можете сменить другую версию по умолчанию, командой:
sudo update-alternatives --config php
Есть 7 вариантов для альтернативы php (предоставляет /usr/bin/php).
Выбор Путь Приор Состояние
------------------------------------------------------------
0 /usr/bin/php8.0 80 автоматический режим
1 /usr/bin/php5.6 56 ручной режим
2 /usr/bin/php7.0 70 ручной режим
3 /usr/bin/php7.1 71 ручной режим
4 /usr/bin/php7.2 72 ручной режим
5 /usr/bin/php7.3 73 ручной режим
* 6 /usr/bin/php7.4 74 ручной режим
7 /usr/bin/php8.0 80 ручной режим
Press to keep the current choice[*], or type selection number: 6
И введя номер нужной вам предыдущей версии PHP.