Почему? Обновил Ubuntu до 16.04 и не взлетели старые вебы, которые не понимают php7, специально для них скомпилировал php5, в принципе все просто: нужно сделать директорию, туда скачать нужные исходники и скомпилировать:
mkdir /zzz
cd /zzz
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
Дальше нужно задать конфигурацию:
./configure \
--enable-pdo \
--with-pdo-mysql \
--with-mysql \
--enable-mbstring \
--with-curl \
--with-gd \
--with-mcrypt \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-xpm-dir \
--with-zlib-dir
Хотел бы обратить особое внимание, нужно подключать только те опции, которые необходимы, чем больше - тем больше библиотек не найдет, факт, что будут ошибки. Итак, смотрим вывод, там будет чего не хватает в системе. Ищем в каком пакете есть отсутствующий файл и ставим, например не хватает mcrypt.h:
apt-file search mcrypt.h
libmcrypt-dev: /usr/include/mcrypt.h
libmcrypt-dev: /usr/include/mutils/mcrypt.h
libtomcrypt-dev: /usr/include/tomcrypt.h
php-doc: /usr/share/doc/php-doc/html/book.mcrypt.html
php-doc: /usr/share/doc/php-doc/html/intro.mcrypt.html
php-doc: /usr/share/doc/php-doc/html/ref.mcrypt.html
Нашлось шесть пакетов с нужным заголовочным файлом, не мудрствуюя ставим первый же пакет:
apt-get install libmcrypt-dev
И по новой запускаем конфигурацию, пока не избавимся от ошибок. Как только нас поздравят с выбором php запускаем следующую команду:
make
Убеждаемся, что в выоде нет ошибок, если есть, то исправляем и делаем следующий пункт:
make install
По окончании процесса в директории /usr/local/bin/ образуется файл php-cgi, берем его и копируем в /usr/lib/cgi-bin/:
cp /usr/local/bin/php-cgi /usr/lib/cgi-bin/php-cgi
Старый конфиг можно было сохранить при обновлении, я так и сделал, можно вынуть из бекапа сервера, и теперь его нужно подсунуть по адресу /usr/local/lib/ На этом и закончили с php. Осталось чутка покурочить краснокожего: нужно подключить модули actions и serve-cgi-bin:
a2enmod actions
a2enconf serve-cgi-bin
service apache2 restart
И последнее, которое вызвало основную головную боль и заняло время, нужно заставить нужный виртуалхост работать с cgi-bin, а не с модулем php. Нужно в конфигурацию хоста вставить следующие строки:
<FilesMatch \.php$> SetHandler application/x-httpd-php5 </FilesMatch> AddHandler application/x-httpd-php5 .php Action application/x-httpd-php5 /cgi-bin/php-cgi
Подсказку нашел здесь, без нее фигушки у меня что нибудь получилось бы, ибо я совсем нуб во всяких таких делах. На этом всё, еще раз перезапускаем Апача, проверям работоспособность, если что правим конфиги и в награду берем пирожок!