Наконец-то дошли руки написать про установку нескольких версий PHP на Centos 7 с Apache web-сервером. Остановимся на последних в двух текущих ветках 7.4 и 8.1. Как известно Centos 8 приказал долго жить Centos‘у 7 😉 Вот с ним и будем копаться. Родная версия PHP 5.4.16 уже на полпути к забвению.
Для начала установим или обновим репозитории EPEL и REMI.
yum install epel-release
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Теперь проверим, какие пакеты php у нас имеются.
yum list php8[0-9]
1 2 3 4 5 6 7 8 9 10 |
Загружены модули: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.reconn.ru * epel: mirror.yandex.ru * extras: mirror.reconn.ru * remi-safe: mirror.reconn.ru * updates: mirror.sale-dedic.com Доступные пакеты php80.x86_64 1.0-3.el7.remi remi-safe php81.x86_64 8.1-1.el7.remi remi-safe |
yum list php7[0-9]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Загружены модули: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.reconn.ru * epel: mirror.yandex.ru * extras: mirror.reconn.ru * remi-safe: mirror.reconn.ru * updates: mirror.sale-dedic.com Доступные пакеты php70.x86_64 2.0-1.el7.remi remi-safe php71.x86_64 2.0-1.el7.remi remi-safe php72.x86_64 2.0-1.el7.remi remi-safe php73.x86_64 2.0-1.el7.remi remi-safe php74.x86_64 1.0-3.el7.remi remi-safe |
Итак, нужные версии 7.4 и 8.1 присутствуют в установленных репозиториях. Установим их и запустим PHP-FPM (менеджер процессов PHP FastCGI), используя следующие команды.
yum install php81 php81-php-fpm php81-php-cli php81-php-mysqlnd php81-php-gd php81-php-ldap php81-php-odbc php81-php-pdo php81-php-pear php81-php-xml php81-php-xmlrpc php81-php-mbstring php81-php-snmp php81-php-soap php81-php-zip php81-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-FPM.
vim /etc/opt/remi/php81/php-fpm.d/www.conf
vim /etc/opt/remi/php74/php-fpm.d/www.conf
Находим строку
listen = 127.0.0.1:9000 и, недолго думая, меняем для версии PHP 8.1 на
listen = 127.0.0.1:9081 и для PHP 7.4
listen = 127.0.0.1:9074 соответственно.
Далее запустим менеджер процессов PHP.
systemctl enable --now php74-php-fpm
1 |
Created symlink from /etc/systemd/system/multi-user.target.wants/php74-php-fpm.service to /usr/lib/systemd/system/php74-php-fpm.service. |
systemctl enable --now php81-php-fpm
1 |
Created symlink from /etc/systemd/system/multi-user.target.wants/php81-php-fpm.service to /usr/lib/systemd/system/php81-php-fpm.service. |
Проверим systemctl status php74-php-fpm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
● php74-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Пн 2022-01-17 19:25:24 MSK; 3h 17min ago Main PID: 1866 (php-fpm) Status: "Processes active: 0, idle: 7, Requests: 210, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/php74-php-fpm.service ├─1866 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf) ├─1867 php-fpm: pool www ├─1868 php-fpm: pool www ├─1869 php-fpm: pool www ├─1870 php-fpm: pool www ├─1871 php-fpm: pool www ├─1978 php-fpm: pool www └─1999 php-fpm: pool www |
Ссылки созданы, сервисы запущены. Теперь создадим скрипты и раздадим им нужные права.
vim /var/www/cgi-bin/php81.fcgi
1 2 |
#!/bin/bash exec /bin/php81-cgi |
vim /var/www/cgi-bin/php74.fcgi
1 2 |
#!/bin/bash exec /bin/php74-cgi |
chmod 755 /var/www/cgi-bin/php*
chown apache.apache /var/www/cgi-bin/php*
ls -al /var/www/cgi-bin/
1 2 3 4 |
drwxr-xr-x 2 root root 4096 янв 17 17:48 . drwxr-xr-x 4 root root 4096 апр 24 2019 .. -rwxr-xr-x 1 apache apache 32 янв 17 17:48 php74.fcgi -rwxr-xr-x 1 apache apache 32 янв 17 17:47 php81.fcgi |
Далее в конфигурационный файл /etc/httpd/conf.d/php.conf, желательно в конце, добавим следующие строки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
################## Action php80-fcgi /cgi-bin/php81.fcgi Action php74-fcgi /cgi-bin/php74.fcgi ################## <Directory /var/www/html/MY_SITE_ONE.ru> AllowOverride all Require all granted # mod_proxy_fcgi options <IfModule mod_proxy_fcgi.c> <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9081" </FilesMatch> </IfModule> </Directory> # ################## # <Directory /var/www/html/MY_SITE_TWO.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> ################## |
Проверим правильность синтаксиса наших файлов.
apachectl configtest
1 |
Syntax OK |
Перезапустим Apache web-сервер.
systemctl restart httpd
Думаю, все опции достаточно прозрачны. Под каждую директорию, где находятся наши сайты, мы прописываем собственный обработчик PHP. Для проверки сделайте файлик info.php
echo "<?php phpinfo(); ?>" > /var/www/html/MY_SITE_ONE/info.php и посмотрите в браузере, что получилось.
Кстати, если закомментировать опции в /etc/httpd/conf.d/php.conf для какого-либо сайта, то отработает родной PHP 5.4.16. Таким образом можно установить любую версию PHP для любого виртуального сайта.
Огромное спасибо!
CentOS 7 NGINX+APACHE+PHP_FPM
Долго мучился с установкой разных версий php на виртуальные хосты (((
Перерыл много инструкций и статей — ничего не получалось (((
По Вашей статье все кратно и понятно!!!
Самое главное что заработало все сразу как надо!!!
ОГРОМНОЕ СПАСИБО!!!
Пожалуйста!