Несколько версий PHP на Centos 7 с Apache

CentOS 7 – один из самых популярных дистрибутивов Linux для хостинга веб-приложений и сайтов. В сочетании с сервером Apache, это надежное и мощное решение для хостинга веб-проектов.

Однако, в современном мире разработки веб-приложений, использование различных версий PHP может быть критически важным для обеспечения совместимости и безопасности проекта. В этой статье мы рассмотрим, как установить несколько версий PHP на CentOS 7 с Apache.

Перед установкой дополнительных версий PHP на CentOS 7, вам потребуется рабочая система с предустановленным Apache и PHP. Если у вас еще нет веб-сервера Apache и PHP, следуйте инструкциям по установке и настройке на официальном сайте проекта CentOS.

Установка нужной версии PHP

Установка Remi Repository:

Для того, чтобы получить доступ к дополнительным версиям PHP, вам понадобится подключить репозиторий Remi. Он содержит множество пакетов, включая различные версии PHP. Выполните следующие команды в командной строке, чтобы добавить репозиторий Remi на вашей CentOS 7 системе:

sudo yum install epel-release

Установка нужной версии PHP

После того как репозиторий Remi добавлен, можно установить нужные версии.

Я буду ставить два релиза php74 и php82.

Посмотрим какие пакеты доступны для установки.

# yum list php8[0-9]

Доступные релизы 8 версии

# yum list php7[0-9]

Доступные релизы 7 версии

Как видно на скриншоте выше, нужные релизы 8.2 и 7.4 присутствуют выше. Приступим к установке.

yum install php82 php82-php-fpm php82-php-cli php82-php-mysqlnd php82-php-gd php82-php-ldap php82-php-odbc php82-php-pdo php82-php-pear php82-php-xml php82-php-xmlrpc php82-php-mbstring php82-php-snmp php82-php-soap php82-php-zip php82-php-opcache

yum install php74 php74-php-fpm php74-php-cli php74-php-mysqlnd php74-php-gd php74-php-ldap php74-php-odbc php74-php-pdo php74-php-pear php74-php-xml php74-php-xmlrpc php74-php-mbstring php74-php-snmp php74-php-soap php74-php-zip php74-php-opcache

После установки нужно отредактировать конфиги менеджера процессов PHP FastCGI или PHP-FPM.

nano /etc/opt/remi/php82/php-fpm.d/www.conf
nano /etc/opt/remi/php74/php-fpm.d/www.conf

Изменяем строчку "listen = 127.0.0.1:9000" таким образом, чтобы для удобства порт заканчивался на релиз php. В нашем случае это "listen = 127.0.0.1:9082" для php82 и "listen = 127.0.0.1:9074" для php74.

Запустим PHP-FPM.
systemctl enable --now php82-php-fpm
systemctl enable --now php74-php-fpm

Создадим два bash скрипта в каталоге /var/www/cgi-bin.
touch /var/www/cgi-bin/php82.fcgi

nano /var/www/cgi-bin/php82.fcgi
#!/bin/bash
exec /bin/php82-cgi

touch /var/www/cgi-bin/php74.fcgi
#!/bin/bash
exec /bin/php74-cgi

Далее поменяем права на 755 и назначим владельца и группу apache.

chmod 755 /var/www/cgi-bin/php*
chown apache:apache /var/www/cgi-bin/php*

После установки нескольких версий PHP, вам необходимо настроить альтернативы, чтобы определить, какая именно версия PHP будет использоваться по умолчанию.

В apache создадим конфигурационный файл "php.conf", который будет определять какую версию php использовать для конкретного сайта.

touch /etc/httpd/conf.d/php.conf

##################
Action php82-fcgi /cgi-bin/php82.fcgi
Action php74-fcgi /cgi-bin/php74.fcgi
##################
<Directory /var/www/html/site1.ru>
AllowOverride all
Require all granted
# mod_proxy_fcgi options
<IfModule mod_proxy_fcgi.c>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9082"
</FilesMatch>
</IfModule>
</Directory>
#
##################
#
<Directory /var/www/html/site2.ru>
AllowOverride all
Require all granted
# mod_proxy_fcgi options
<IfModule mod_proxy_fcgi.c>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9074"
</FilesMatch>
</IfModule>
</Directory>
##################

Перезапуск Apache

После изменения альтернатив PHP, не забудьте перезапустить веб-сервер Apache.
systemctl restart httpd

Чтобы проверить какой релиз использует сайт, необходимо поместить файл в директорию сайта, в моем случае это "/var/www/html/site1.ru/my.php" с содержимым:
"<?php phpinfo(); ?>"
Затем в браузере просто открываем файл:

site1.ru/my.php

Итог

Теперь вы знаете, как установить несколько версий PHP на CentOS с помощью Apache. Это даст вам гибкость и возможность адаптировать ваш проект под различные требования и решать возникающие проблемы совместимости.

Помните, что правильное управление версиями PHP также включает в себя регулярные обновления и обеспечение безопасности вашей системы.

Перед установкой новых версий PHP, убедитесь, что они совместимы с вашими приложениями и не вызовут конфликтов с уже установленными пакетами. Следуйте официальным руководствам и документации для обновления версий PHP и управления зависимостями пакетов на вашей системе CentOS 7.

В дополнение к установке нескольких версий PHP через репозиторий Remi, существуют также другие методы управления версиями PHP.

PHP-FPM

PHP-FPM (FastCGI Process Manager) - альтернативный способ обработки PHP-скриптов вместо встроенного веб-сервера Apache модуля mod_php. PHP-FPM позволяет управлять пулами процессов PHP, и это делает его более эффективным для обработки запросов в многопользовательской среде.