Несколько версий PHP на одном сервере

Будет рассматриваться случай, когда все сайты работают на PHP7, а несколько - требуют PHP5.
Для этого PHP7 будет установлен как модуль Apache, а PHP5 - как CGI.

PHP5 будем собирать из исходников.

Для начала установим несколько вспомогательных программ, если они еще не установлены:

apt install build-essential 
apt install zip unzip 
apt install pkg-config
apt install autoconf

Переходим во временную директории, скачиваем PHP, патч для работы с OpenSSL-1.1.0 и патч для freetype (c freetype я больше всего намучался, получая ошибку "freetype-config not found"):

cd /tmp
wget -O php-5.6.36.tar.gz https://nl1.php.net/get/php-5.6.36.tar.gz/from/this/mirror
wget https://zettasystem.com/PHP-5.6.31-OpenSSL-1.1.0-compatibility-20170801.patch
wget -O freetype.path https://git.archlinux.org/svntogit/packages.git/plain/trunk/freetype.patch?h=packages/php

Распаковываем архив с PHP, переходим внутрь, применяем патчи и заново генерируем configure:

tar -xvf php-5.6.36.tar.gz
cd php-5.6.36
patch -p1 < ../PHP-5.6.31-OpenSSL-1.1.0-compatibility-20170801.patch
patch -p1 < ../freetype.path
autoconf

Устанавливаем необходимые модули:

apt install libxml2-dev zlib1g-dev libcurl4-openssl-dev libssl-dev libmcrypt-dev libxslt1-dev libreadline-dev libtidy-dev libgd-dev libfreetype6-dev

Сосздаем символическую ссылку на curl:

cd /usr/local/include 
ln -s /usr/include/x86_64-linux-gnu/curl curl
cd /tmp/php-5.6.36

Пробуем configure:

./configure \
--with-config-file-path=/etc/php/5.6/php.ini \
--with-gd \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--enable-ftp \
--enable-pdo \
--enable-soap \
--enable-sockets=shared \
--enable-zip \
--with-readline \
--with-tidy \
--with-zlib \
--with-mcrypt \
--with-vpx-dir \
--with-jpeg-dir \
--with-png-dir \
--with-xpm-dir \
--with-openssl \
--with-curl \
--with-pear \
--with-xsl \
--with-freetype-dir=/usr/include/freetype2 \
--enable-gd-native-ttf \
--enable-cli

Если есть ошибки, с помощбю Гугла доустанавливаем недостающие пакеты. Затем:

make
make install

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

cp /usr/local/bin/php-cgi /usr/lib/cgi-bin/php5
cp /usr/local/bin/php /usr/lib/cgi-bin/php5-cli

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

Далее настройка Apache. В нужный хост добавить:

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

AddHandler application/x-httpd-php5 .php
Action application/x-httpd-php5 /cgi-bin/php5

Включить serve-cgi-bin:

a2enconf serve-cgi-bin
service apache2 restart

Если ругается Invalid command 'Action', то включить модуль Action:

a2enmod actions

Возможно, потребуется включить модуль:

 a2enmod cgi