Разные версии PHP на разных сайтах на одном сервере

Бывают ситуации, когда необходимо для одного или нескольких сайтов на хостинге подключить другую версию PHP. Например, ситуация, когда собрали веб-сервер с PHP-7.x (актуально на момент написания), а у вас есть сайт который может работать максимум с версией PHP 5.х. Яркий пример сайт на Joomla 1.5.

В этой ситуации решение я нашел для себя следующее:

1. Для начала собираем WEB-Server с 2-мя установленными версиями PHP.

2. Ставим вторую версию PHP — PHP-5.6 (на момент написания максимальная версия ветки), ставится с расширением php5.6-cgi.

apt-get install php5.6 php5.6-cgi php5.6-mysql libapache2-mod-php5.6 php5.6-mbstring php5.6-zip php5.6-gd php5.6-xml php5.6-curl

3. Проверим наличие установленных версий и версию по умолчанию.

update-alternatives --config php

4. Проверим наличие скомпилированного фала php5.6 в /usr/lib/cgi-bin/.

5. Запускаем модуль апача для работы с cgi и перезапускаем.

a2enmod actions
service apache2 restart 
a2enmod cgi 
service apache2 restart

6. Включим конфиг апача serve-cgi-bin

a2enconf serve-cgi-bin
service apache2 restart 

Осталось настроить наши виртуальные хосты для работы с другой версией (не по умолчанию) PHP.

7. В файл /etc/apache2/sites-available/*-default.conf (там находятся все виртуал хосты) добавляем строчки для запуска PHP-5.6 в настройки необходимого хоста, т.е. между <VirtualHost> </VirtualHost>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php5.6
</FilesMatch>
AddHandler application/x-httpd-php5.6 .php
Action application/x-httpd-php5.6 /cgi-bin/php5.6

Перезапускаем Apache и все должно работать.

service apache2 restart

Заметка:

Переключение между версиями по умолчанию
php5.6 -> php7.0

a2dismod php5.6 ; 
a2enmod php7.0 ; 
service apache2 restart
update-alternatives --set php /usr/bin/php7.0

php7.0 -> php5.6 :

a2dismod php7.0 ;
a2enmod php5.6 ;
service apache2 restart
update-alternatives --set php /usr/bin/php5.6
Top