Зачем нужно несколько версий PHP
На хостинге с несколькими сайтами часто нужны разные версии PHP: один сайт на WordPress требует PHP 8.1+, другой — старый Magento 1 работает только на PHP 7.4. Через репозиторий ondrej/php можно держать несколько версий одновременно.
Установка репозитория ondrej/php (Ubuntu/Debian)
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt updateУстановка нескольких версий PHP
# PHP 7.4
sudo apt install php7.4-fpm php7.4-cli php7.4-mysql php7.4-curl \
php7.4-mbstring php7.4-xml php7.4-zip php7.4-gd
# PHP 8.1
sudo apt install php8.1-fpm php8.1-cli php8.1-mysql php8.1-curl \
php8.1-mbstring php8.1-xml php8.1-zip php8.1-gd
# PHP 8.2
sudo apt install php8.2-fpm php8.2-cli php8.2-mysql php8.2-curl \
php8.2-mbstring php8.2-xml php8.2-zip php8.2-gdПроверка запущенных PHP-FPM
systemctl status php7.4-fpm php8.1-fpm php8.2-fpm
# Список сокетов
ls /run/php/
# php7.4-fpm.sock php8.1-fpm.sock php8.2-fpm.sockНастройка Nginx: разные версии для разных сайтов
# Сайт 1 — PHP 8.2
server {
server_name newsite.com;
root /var/www/newsite;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# Сайт 2 — PHP 7.4 (старый сайт)
server {
server_name oldsite.com;
root /var/www/oldsite;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}Выбор версии PHP CLI по умолчанию
# Показать текущую версию
php --version
# Список доступных версий
update-alternatives --list php
# Изменить версию по умолчанию
sudo update-alternatives --set php /usr/bin/php8.2
# Интерактивный выбор
sudo update-alternatives --config phpСмена версии PHP для cPanel (через .htaccess)
# В .htaccess сайта
AddHandler application/x-httpd-php82 .php
# или через PHP-FPM пул — задаётся в настройках хостингаКаждая версия PHP-FPM работает независимо со своими пулами и конфигурацией. Изменение
php.ini для PHP 8.2 не влияет на PHP 7.4.