Речь в заметке пойдёт о модуле PHP7, покдлюченном как модуль апача на всём сервере, и PHP5.6, подключенном как PHP-CGI у нужных сайтов.

И речь пойдёт не о быстрой смене версии php на всём сервере, а именно о том, чтобы, например, все сайты на сервере работали с PHP7, а один или несколько, например с PHP5.

Поехали!

Скачиваем исходники PHP нужной версии, распаковываем и переходим в папку с ними

$ cd /tmp

$ wget -O php-5.6.16.tar.bz2 http://php.net/get/php-5.6.16.tar.bz2/from/this/mirror

$ tar -xvf php-5.6.16.tar.bz2

$ cd php-5.6.16


Собираем нужную версию php

Компилируем php тремя коммандами:

1.

./configure \
--enable-pdo \
--with-pdo-mysql \
--with-mysql \
--with-mysqli \
--enable-mbstring \
--with-curl \
--with-gd \
--with-mcrypt \
--with-vpx-dir \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-xpm-dir \
--with-zlib-dir \
--with-openssl \
--with-pear    

Во время конфигурирования скорее всего будут ошибки. Они по большей части свидетельствуют о отсутствующих пакетах на сервере. Названия недостающих легко гугляться.

2.

$ make

3.

$ make install


Копируем получившийся бинарник

Файл /usr/local/bin/php-cgi надо переименовать и положить по пути /usr/lib/cgi-bin/php5


Настраиваем нужный VirtualHost апача для работы с нашим бинарником

Ну и самое главное — это заставить нужный хост не работать как модуль апача. Скажу честно, на поиск решения я потратил не мало времени.

Эти строчки нужно добавить в нужный VirtualHost

<FilesMatch \.php$>
    SetHandler application/x-httpd-php5
</FilesMatch>

AddHandler application/x-httpd-php5 .php

Action application/x-httpd-php5 /cgi-bin/php5


Нюансы и возможные проблемы

  1. Ошибка: Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration

Не включен модуль апача actions. Включаем:

$ a2enmod actions

$ service apache2 restart
  1. Файл php.ini будет погдружаться из папки /usr/local/lib/. Изменить это можно опцией --with-config-file-path с выбором при компиляции.

  2. Также должен быть включен конфиг апача serve-cgi-bin

$ a2enconf serve-cgi-bin

$ service apache2 restart