Обновление PHP
Обновление препроцессора гипертекста PHP, используемого во многих CMS (Content management system), требуется при серьёзных обновлениях CMS и её модулей.
Препроцессор помогает автоматизировать различные серверные задачи. Он обрабатывает динамический контент и запросы к базе данных, выполняет предварительную обработку/отображение данных.
Содержание
- Введение
- Задача
- Обновление PHP на сервере Nginx
- Установка PHP 8.1
- Правка конфигурационного файла Nginx
- Установка модулей PHP в Ubuntu
- Удаление старой версии PHP в Ubuntu
Введение
- Система Linux под управлением Ubuntu 20.04;
- Работающий веб-сервер Nginx;
- PHP версии 7.4.
Задача
Обновление PHP 7.4 до версии 8.1.
Обновление возможно, конечно, до версии 8.2, но не все модули тестировались на версии 8.2.
Обновление PHP на сервере Nginx
Сначала проверяем необходимость в обновлении дистрибутива:
mensh@139-162-132-20:~$ sudo apt update mensh@139-162-132-20:~$ sudo apt upgradeУстанавливаем общие свойства программного обеспечения для получения его из независимых источников:
mensh@139-162-132-20:~$ sudo apt install software-properties-commonДобавляем ppa:ondrej/php , который предоставляет разные версии PHP для Ubuntu:
mensh@139-162-132-20:~$ sudo add-apt-repository ppa:ondrej/phpПосле загрузки PPA нажимаем Enter, подтверждая добавление репозитория. В PPA доступны версии препроцессора от 5.6 до 8.2.
Для включения новых пакетов выполняем обновление apt :
mensh@139-162-132-20:~$ sudo apt update mensh@139-162-132-20:~$ sudo apt upgradeУстановка PHP 8.1
Теперь для установки препроцессора версии 8.1 на сервере Nginx следует выполнить следующую команду:
mensh@139-162-132-20:~$ sudo apt install php8.1-fpm -yЕсли не указывать номер версии, то по умолчанию будет установлена последняя версия (8.2).
mensh@139-162-132-20:~$ sudo systemctl reload php8.1-fpmПравка конфигурационного файла Nginx
Редактируем конфигурационный файл Nginx:
mensh@139-162-132-20:~$ mensh@139-162-132-20:~$ sudo vim /etc/nginx/sites-available/linuxcookbook.ru.conf . location ~ '\.php$|^/update.php' < include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; >.Здесь версия препроцессора была изменена с 7.4 на 8.1.
По завершении установки перезапускается служба Nginx для применения изменений:
mensh@139-162-132-20:~$ sudo systemctl restart nginxУстановка модулей PHP в Ubuntu
Устанавливаем модули, необходимые для работы CMS. Я, например, установил следующие модули:
mensh@139-162-132-20:~$ sudo apt install php8.1-calendar mensh@139-162-132-20:~$ sudo apt install php8.1-ctype mensh@139-162-132-20:~$ sudo apt install php8.1-curl mensh@139-162-132-20:~$ sudo apt install php8.1-date mensh@139-162-132-20:~$ sudo apt install php8.1-dom mensh@139-162-132-20:~$ sudo apt install php8.1-exif mensh@139-162-132-20:~$ sudo apt install php8.1-FFI mensh@139-162-132-20:~$ sudo apt install php8.1-ftp mensh@139-162-132-20:~$ sudo apt install php8.1-gd mensh@139-162-132-20:~$ sudo apt install php8.1-gettext mensh@139-162-132-20:~$ sudo apt install php8.1-gmp mensh@139-162-132-20:~$ sudo apt install php8.1-mysql mensh@139-162-132-20:~$ sudo apt install php8.1-hash mensh@139-162-132-20:~$ sudo apt install php8.1-iconf mensh@139-162-132-20:~$ sudo apt install php8.1-intl mensh@139-162-132-20:~$ sudo apt install php8.1-json mensh@139-162-132-20:~$ sudo apt install php8.1-libxml mensh@139-162-132-20:~$ sudo apt install php8.1-mbstringПроверяем список всех загруженных модулей:
mensh@139-162-132-20:~$ php -m [PHP Modules] apcu bz2 calendar Core ctype curl date dom exif FFI fileinfo filter ftp gd gettext gmp hash iconv intl json libxml mbstring mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql Phar posix readline Reflection session shmop SimpleXML sockets sodium SPL standard sysvmsg sysvsem sysvshm tokenizer xml xmlreader xmlwriter xsl Zend OPcache zlib [Zend Modules] Zend OPcache mensh@139-162-132-20:~$Удаление старой версии PHP в Ubuntu
Для удаления старой версии препроцессора из Ubuntu выполняем следующую команду:
mensh@139-162-132-20:~$ sudo apt purge php7.4-fpmУдаляем потерянные пакеты:
mensh@139-162-132-20:~$ sudo apt autoremoveПроверяем установленную версию:
mensh@139-162-132-20:~$ php -v PHP 8.1.20 (cli) (built: Jun 8 2023 15:25:40) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.20, Copyright (c) Zend Technologies with Zend OPcache v8.1.20, Copyright (c), by Zend Technologies mensh@139-162-132-20:~$Заключение
После прочтения этой статьи и следуя представленным здесь инструкциям любой начинающий администратор своего сервера Ubuntu легко обновит PHP.
Как установить PHP 8.2 на Debian/Ubuntu
PHP 8.2 получил ряд крупных изменений, таких как readonly классы, новое расширение Random, редактирование конфиденциальных параметров, а также оптимизационные изменения языка, включающее устаревание динамических свойств и интерполяцию строк.
В настоящее время пакеты PHP 8.2 не предлагаются в стандартных репозиториях программного обеспечения Debian и Ubuntu, но PHp 8.2 доступен в репозитории поддерживаемом Ondřej Surý.
Репозиторий Ondřej основной и самый обновляемый репозиторий предлагающий пакеты PHP и расширения PECL для операционных систем на основе Debian и Ubuntu.
Что нового и изменения в PHP 8.2
В PHP 8.2 представлен обширный список новых функций для обеспечения безопасности и производительности, а также несколько устаревших функций, которые могут выдавать дополнительные предупреждения.
Полный список изменение можно посмотреть в статье PHP 8.2: Что нового. Изменения и новый функционал.
Заметные изменения дополнений и INI
PHP 8.2 не содержит каких-либо заметных изменений влияющих на процесс установки или обновления. На самом деле PHP 8.2 включает новое расширение Random , но это расширение встроенное и PHP не может быть скомпилирован без него.
Одно заметное изменение в настройках и PHP INI файлах заключается в том, что PHP 8.2 выдаёт предупреждение о неправильном форматировании INI настроек, отключённое в старых версиях PHP.
Внимание: Описанные далее действия потенциально могут нарушить работоспособность системы
Следующие действия выполняются, как sudo и для их выполнения требуется соответствующий уровень разрешений. Также применяются обычные предупреждения при внесении каких-либо общесистемных изменений. Обязательно сделайте резервную копию системы и проверьте резервные копии, прежде чем продолжить.
Краткое руководство по установке/обновлению PHP 8.2
Далее приведены команды для установки/обновления до PHP 8.2, подробные шаги описаны в Подробном руководстве по установке/обновлению.
Ubuntu
sudo dpkg -l | grep php | tee packages.txt
sudo add-apt-repository ppa:ondrej/php # Нажмите Enter, когда будет предложено.
sudo apt update
sudo apt install php8.2 php8.2-cli php-8.2bz2,curl,mbstring,intl>
sudo apt install php8.2-fpm
# Или
# sudo apt install libapache2-mod-php8.2
sudo a2enconf php8.2-fpm
# При обновлении со старой версии PHP:
sudo a2disconf php8.1-fpm
## Удаление старых пакетов
sudo apt purge php8.1*Debian
sudo dpkg -l | grep php | tee packages.txt
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
# Добавьте в фигурные скобки все нужные вам расширения.
sudo apt install php8.2 php8.2-cli php8.2-bz2,curl,mbstring,intl>
sudo apt install php8.2-fpm
# ИЛИ
# sudo apt install libapache2-mod-php8.2
sudo a2enconf php8.2-fpm
# При обновлении со старой версии PHP:
sudo a2disconf php8.1-fpm
## Удаление старых пакетов
sudo apt purge php8.1*Подробное руководство по установке/обновлению PHP 8.2
1. Сохраните список расширений PHP
Следующая команда выводит список всех связанных с PHP пакетов, существующих в текущей системе, и сохраняет их в текстовый файл packages.txt . Это помогает восстановить тот же список пакетов в PHP 8.2.
При новой установке этот шаг не требуется.
dpkg -l | grep php | tee packages.txt2. Добавить ondrej/php PPA в качестве репозитория
Репозитории поддерживаемые Ondřej Surý содержат основные пакеты PHP и постоянно обновляются.
После добавления этого репозитория в список источников программного обеспечения, первоначальную установку и обновление можно будет выполнить с помощью стандартных команд apt .
Ubuntu LTS Версии
sudo add-apt-repository ppa:ondrej/php # Нажмите Enter, когда будет предложено.
sudo apt updateDebian
sudo apt install apt-transport-https lsb-release ca-certificates
software-properties-common
sudo add-apt-repository ppa:ondrej/php # Нажмите Enter, когда будет предложено.
sudo apt update3. Установка PHP 8.2 и расширения
Все пакеты PHP 8.2, доступные в репозитории, добавленном на шаге 2, следуют шаблону именования php8.2- . Расширения пакета PHP, такие, как json , ctype , date , random и т.д. не нужно устанавливать вручную.
Пакет php8.2-common включает в себя несколько распространённых пакетов PHP. Позже можно выборочно отключить ненужные расширения.
sudo apt install php8.2 php8.2-cli php8.2-curl,bz2,mbstring,intl>Добавьте в фигурные скобки все необходимые расширения для новой установки. При обновлении существующей установки PHP в файле packages.txt , созданном в шаге 1, должны быть перечислены все текущие PHP пакеты.
4. Установка и включение серверных API
В системе, в которой веб-сервер интегрируется с PHP, установите дополнительные пакеты API сервера. Ниже приведены примеры наиболее популярных комбинаций:
Сервер Apache с PHP-FPM
sudo apt install php8.2-fpm
sudo a2enconf php8.2-fpm
sudo a2disconf php8.1-fpm # При обновлении с более старой версии PHP
sudo service apache2 restartApache c PHP в качестве модуля Apache
Установка PHP в качестве модуля Apache не рекомендуется, если только это не требуется для пограничного варианта использования.
sudo apt install libapache2-mod-php8.2
sudo a2enmod php8.2
sudo a2dismod php8.1 # При обновлении с более старой версии PHP
sudo service apache2 restartNginx с PHP-FPM
sudo apt install php8.2-fpm
sudo service nginx restartЗатем отредактируйте соответствующий файл конфигурации Nginx, чтобы он указывал на новый PHP сокет в директиве fastcgi_pass :
- fastcgi_pass unix:/run/php/php8.1-fpm.sock; + fastcgi_pass unix:/run/php/php8.2-fpm.sock;5. Проверьте инсталляцию PHP 8.2
Для проверки установленной версии выполните следующие команды PHP CLI:
php -v
php -mОжидается, что вывод покажет PHP 8.2 вместе со списком установленных расширений PHP.
Для проверки интеграции с веб-сервером, попробуйте запустить PHP файл через веб-сервер.
6. Очистка старых пакетов PHP
Следующие команды удаляют старые версии PHP. Рекомендуется не удалять их, пока не будет проверена правильность установки PHP 8.2.
sudo apt purge php8.1* # Измените "php8.1" на имена старых версий PHP.Это также удалит файлы конфигурации для удаляемых пакетов.
Запуск нескольких версий PHP
Нет необходимости устанавливать PHP 8.2 и удалять старую версию PHP, потому что можно одновременно запускать несколько версий PHP на одном сервере.
PHP 8.2 CLI будет установлен в /usr/bin/php8.2 по умолчанию и связан с php символической ссылкой, другие версии PHP будут установлены в (/usr/bin/php80, /usr/bin/php7.4 и т.д.). По умолчанию php связано символической ссылкой с последней версией PHP по умолчанию, но это можно изменить.
Команда update-alternatives предоставляет простой способ переключения между версиями PHP для PHP CLI, если несколько версий ссылаются на один и тот же php путь.
sudo update-alternatives --config phpЗапуск этой команды вызывает интерактивное приглашение выбрать путь для php указывающий на нужную версию PHP.
There are 2 choices for the alternative php (providing /usr/bin/php).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/php8.2 82 auto mode
1 /usr/bin/php8.1 81 manual mode
2 /usr/bin/php8.2 82 manual modeТо же самое можно выполнить без интерактивной подсказки:
update-alternatives --set php /usr/bin/php8.1Как обновить PHP до версии 7.4 на Ubuntu Server?
Возникла ошибка на сайте. В панели администратора WordPress требуется установить актуальную версию PHP. Как правильно обновить PHP и его компоненты на Ubuntu Server со стеком LAMP?
Руководство по обновлению PHP до версии 7.4 на сервере Apache под управлением Ubuntu/Debian.
Добавление репозитория
Добавьте сторонний репозиторий и обновите apt . В случае повторного обновления пропустите этот шаг.
Для Ubuntu:
sudo add-apt-repository ppa:ondrej/php # Нажмите Enter sudo apt-get updateДля Debian:
sudo apt install apt-transport-https lsb-release 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Установка PHP 7.4
Для установки ядра PHP, выполните:
sudo apt install php7.4 php7.4-common php7.4-cliДля установки обязательных расширений, выполните:
sudo apt install php7.4-curl php7.4-json php7.4-gd php7.4-mbstring php7.4-intl php7.4-bcmath php7.4-bz2 php7.4-readline php7.4-zip php-imagickНастройка Apache
Определите, какой из модулей Apache MPM используется на вашем сервере:
apachectl -VДля сервера с модулем prefork , выполните:
sudo a2enmod php7.4Для сервера с модулем event , выполните:
sudo apt install php7.4-fpmsudo systemctl restart apache2Расширения для WordPress
Для корректной работы сайтов под управлением WordPress, выполните установку модулей:
sudo apt install php7.4-xml php7.4-xmlrpc php7.4-soapПроверка версии PHP
Для проверки текущей версии PHP, выполните:
php -vКак обновить и включить новую версию PHP

Прежде всего убедитесь, что Ваши сайты и приложения на PHP поддерживают новую версию PHP на которую Вы желаете обновится. Многие, особенно самописные сайты, или не обновленные приложения популярных CMS не совместимы с новыми версиями PHP. Поэтому лишний раз перепроверите совместимость. Зайдите на сайты разработчиков CMS, прочитайте рекомендации или напишите им в поддержку. К примеру e Joomla 3, на сегодняшний день, многие плагины и модули не работают c 8-й версией PHP. Поэтому не спешите переходить на 8-ю версию.
Итак, если все проверили можем преступать.Обновление до PHP 7.4
Обязательно сделайте резервную копию Ваших сайтов (файлы и базы данных)!
Данный мануал подойдет и для серверов работающих на VestaCP
Сначала добавим репозитории
add-apt-repository ppa:ondrej/php
add-apt-repository ppa:ondrej/apache2
sudo apt update
sudo apt -y upgrade
Установим основной пакет PHP 7.4
apt install php7.4
После успешной установки, добавим необходимые модули для web сервера:
apt install php7.4-common php7.4-mysql php7.-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opache php7.4-soap php7.4-zip php7.4-intl
Многие считают, что этого достаточно и не могут понять, почему на сервере по прежнему работает старая версия PHP. Что бы заработала новая, необходимо отключить старую и включить новую. Допустим у Вас стоит версия 5.4, тогда выполняем команду ее отключения:
a2dismod php5.4
Затем включаем новую, установленную 7.4:
a2enmod php7.4
Далее необходимо перезапустить apache:
systemctl restart apache2
Все, теперь на сервере будет работать новая версия PHP7.4
Для многих сайтов требуются дополнительные модули. Вы их можете установить дополнительно. Допустим для многих сайтов требуются модули gmp и bcmath. Устанавливаются командой:apt install php7.4-bcmath php7.4-gmp
Каждый раз после установки дополнительных модуле PHP необходимо перезапускать веб-сервер:
systemctl restart apache2
Если не думаете использовать старую версию, то можете ее удалить командой:
apt remove php5.4 apt autoremove
Проверить версию PHP на сервере можно создав в корне сайта файл, допустим с именем web.php с кодом:

И открыть его в адресной строке www.ваш-сайт/web.php»
Так Вы сможете увидеть полную информацию о PHP и установленных модулях.
Установка PHP 8.1
8-я версия PHP устанавливается аналогично, достаточно заменить в команда, что выше, 7.4 на 8.1
apt install php8.1
apt install php8.1-common php8.1-mysql php8.1-xml php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-dev php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip php8.1-intl
Не забудьте включить 8-ю версию PHP, прежде отключив старую 7.4
Если Вам помогла эта статья, пожалуйста, чуть ниже на этой страничке поставьте 5 звезд, и поделитесь статьей в социальных сетях. Благо дарим!
