Установка разных версий PHP на Linux Debian
В Debian можно легко управлять несколькими версиями PHP. Мы рассмотрим процесс установки разных версий пакетов и управления ими.
Установка PHP
В зависимости от необходимой версии PHP и версии Debian, подход к установке может отличаться.
Установка базовой версии
Это самый простой способ. Каждая версия Debian в своем репозитории содержит соответствующую версию PHP.
Посмотреть, какая версия будет установлена из репозитория системы можно командой:
apt search --names-only '^php[.0-9]{3}$'
Установка выполняется одной командой:
apt install php
Установка определенной версии
Если нам необходима версия PHP, которой нет в репозитории сисемы, выполняем установку дополнительного — sury.org.
Сначала установим следующие пакеты:
apt install lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 curl
* где:
- lsb-release — для определения версии релиза операционной системы.
- ca-certificates — набор корневых сертификатов.
- apt-transport-https — дополнение для возможности использовать репозитории по https.
- software-properties-common — утилита для работы с репозиториями.
- gnupg2 — для шифровки и дешифровки цифровых подписей. Нужна для работы с репозиториями.
- curl — программа для отправки http-запросов. Нам нужна для загрузки ключа репозитория
Установим gpg-ключ репозитория sury.org:
curl -sSLo /etc/apt/trusted.gpg.d/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
Создадим конфигурационный файл с настройкой репозитория sury.org:
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/sury-php.list
Обновим список пакетов:
apt update
Теперь можно установить нужную версию интерпретатора:
apt-get install php7.4
apt-get install php8.1
* в данном примере 7.4 и 8.1.
Выбор версии PHP по умолчанию
Посмотреть текущую версию php, которая работает по умолчанию можно командой:
php -v
Сменить версию по умолчанию:
update-alternatives --config php
Если увидим сообщение:
...
Nothing to configure.Значит у нас установлена всего одна версия PHP.
Мы должны увидеть что-то на подобие:
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/php8.1 81 auto mode
1 /usr/bin/php7.4 74 manual mode
2 /usr/bin/php8.1 81 manual mode
* в данном примере используется версия php8 как версия по умолчанию.
Для смены, система предложит нам выбрать версию из списка:
Press <enter> to keep the current choice[*], or type selection number: 1
* так мы переключимся на php7.4.
Установка расширений
Рассмотрим вариант с установкой через репозиторий и с помощью сборки из исходников.
Используем репозиторий
Из настроенного ранее репозитория расширения устанавливаются с синтаксисом:
apt install php<версия>-<расширение>
Для версии, которая идет по умолчанию в репозитории, установку можно выполнить так:
apt install php-mysqli
В остальных случаях обязательно указываем версию:
apt install php7.4-mysqli
Сборка расширения из исходника
Данный вариант посложнее, но позволяет собрать расширение последней версии или того, которого нет в репозитории. Рассмотрим на примере php-amqp.
Для начала зададим переменную с версией PHP, с которой будем работать:
export PHP_VER=8.1
* так нам будет удобнее вводить команды.
установим пакет php-dev под нужную нам версию PHP:
apt install php${PHP_VER}-dev
Устанавливаем библиотеки, необходимые для расширения:
apt install librabbitmq-dev
* для какого расширения какие библиотеки нужно устанавливать, ориентируясь на документацию самого расширения.
Скачиваем исходник. Источники могут быть разные — конкретно, в нашем примере:
git clone https://github.com/php-amqp/php-amqp.git
Если система вернет ошибку, что git-команда не найдена, выполняем команду:
apt install git
Переходим в каталог с исходником:
cd php-amqp
Запускаем компиляцию расширения:
phpize${PHP_VER}
Конфигурируем исходник:
./configure
Запускаем сборку:
make
Смотрим каталог, где находятся файлы расширений PHP:
php${PHP_VER} -i | grep extension_dir
В моем случае ответ был:
extension_dir => /usr/lib/php/20210902 => /usr/lib/php/20210902
Значит, собранное расширение я буду копировать в каталог /usr/lib/php/20210902:
cp modules/amqp.so /usr/lib/php/20210902/
Создаем новый конфигурационный файл для расширения:
vi /etc/php/${PHP_VER}/mods-available/amqp.ini
extension=amqp.so
Создаем симлинк на конфигурацию для командной строки PHP:
ln -s /etc/php/${PHP_VER}/mods-available/amqp.ini /etc/php/${PHP_VER}/cli/conf.d/
А также для конфигурации обработчиков.
а) Если используется fpm:
ln -s /etc/php/${PHP_VER}/mods-available/amqp.ini /etc/php/${PHP_VER}/fpm/conf.d/
б) Если используется apache:
ln -s /etc/php/${PHP_VER}/mods-available/amqp.ini /etc/php/${PHP_VER}/apache2/conf.d/
Проверяем, что модуль появился в PHP:
php${PHP_VER} -m
Настройка PHP
В Ubuntu настройки PHP находятся в разных файлах — для каждой версии и для каждой системы, которая обрабатывает запросы.
Например, для php версии 8.1, которая будет запускаться из командной строки, файл будет:
vi /etc/php/8.1/cli/php.ini
для apache:
vi /etc/php/8.1/apache2/php.ini
для fpm:
vi /etc/php/8.1/fpm/php.ini