Настройка PHP 5.2 (через fastcgi) и PHP 5.3 (как модуль Apache2) на одном сервере под управлением Ubuntu 10.04 (и бонус: прикручивание ZendOptimizer)

Ситуация проста: на новый и очаровательный сервер с Ubuntu 10.04+ и современным (когда-то) PHP 5.3, пригодным для всех актуальных версий CMS, вдруг требуется подселить старый-старый сайт, начинающий сыпать ошибками при попытке запуска на PHP 5.3 (подавай ему чего-нибудь постарше, например, PHP 5.2). Кто виноват — понятно. Но что делать?

Не паниковать! На одном сервере с одним Apache2 прекрасно заводятся и соседствуют PHP 5.2 (через fastcgi) и PHP 5.3 (как модуль Apache2). Мы далее решим проблему так, что указать какой именно PHP использовать можно будет на уровне настроек виртуального хоста.

Эта статья была обновлена до актуального состояния. В частности, ссылки на PHP 5.2 тут рабочие (он переехал в музей старых версий). Мануал не годен для Ubuntu 13.10, поскольку там при сборке php не удаётся подцепить libjpeg62. В общем, коли уж вам приходится заниматься некрофилией, то выбирайте для этого и систему постарее (разумеется, в отдельной виртуалке или на отдельном ни на что более не годном VPS).

Скачиваем дистрибутив php 5.2:
wget http://museum.php.net/php5/php-5.2.17.tar.gz

Распаковываем архив:
tar zxvf php-5.2.17.tar.gz

Заходим в директорию:
cd php-5.2.17

Устанавливаем зависимости:
sudo aptitude install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-dev make

Конфигурируем, собираем и ставим из исходников наш php 5.2 в директорию /opt/php5.2:
./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect make

sudo make install

Мы, убунтоводы, избалованы готовыми пакетами, так что наберитесь терпения: с непривычки может показаться, что сборка (по команде make) занимает много времени 🙂

Когда всё установиться, можно убедиться в том, что на вашем сервере теперь появилась нужная версия php такой командой:
/opt/php5.2/bin/php -v

Однако, про этот php пока ничего не знает наш уважаемый веб-сервер Apache2. Мы их познакомим через fastcgi.

Ставим:
sudo aptitude install apache2-suexec libapache2-mod-fcgid

Включаем нужные модули Apache2:
sudo a2enmod cgi fcgid actions

Перезапускаем Apache, чтобы модули подцепились:
sudo service apache2 restart

Теперь создадим файл (он будет просто обёрткой, вызывающей наш исполнимый бинарник /opt/php5.2/bin/php-cgi, но с нужными настройками, которые вы можете изменить или дополнить):
sudo nano /usr/lib/cgi-bin/php52-cgi

И туда поместим буквально следующее:
#!/bin/sh PHPRC="/opt/php5.2/" export PHPRC PHP_FCGI_CHILDREN=4 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_MAX_REQUESTS

exec /opt/php5.2/bin/php-cgi

Сделаем файл исполнимым:
sudo chmod +x /usr/lib/cgi-bin/php52-cgi

Теперь создадим необходимую часть конфига для виртуальных хостов, которым потребуется php 5.2:
sudo nano /etc/apache2/php52.conf

Поместим в файл следующее:
SetHandler application/x-httpd-php5 ScriptAlias /php52-cgi /usr/lib/cgi-bin/php52-cgi Action application/x-httpd-php5 /php52-cgi

AddHandler application/x-httpd-php5 .php

Теперь давайте пойдём в конфиг того виртуального хоста, который должен работать с php 5.2 и добавим в него следующую строку (например, после DocumentRoot…):
... Include php52.conf

...

Перезапустим Apache, чтобы подцепились новые настройки виртуального хоста:
sudo service apache2 restart

Готово! Идите на нужный хост и проверяйте: он теперь обслуживается php 5.2.

Необязательный бонус. Прикручиваем к этому барахлу Zend Optimizer

Скачать совместимую с 5.2.17 версию пока ещё можно тут: http://www.zend.com/en/products/guard/downloads-prev?platform=Linux (потребуется регистрация)

Полученный архив скидывайте на сервер и доставайте из него файл ZendOptimizer.so из директории ./ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/

Создавайте директорию для хранения библиотеки:

mkdir /usr/local/lib/Zend

Перемещайте туда файл библиотеки (если вы распаковывали на сервере, то он уже будет исполнимым, если нет, то сделайте его таковым):

mv ZendOptimizer.so /usr/local/lib/Zend/

Создайте файл с конфигурацией для php:
sudo nano /opt/php5.2/etc/php.ini

Добавьте туда строки:
zend_extension=/usr/local/lib/Zend/ZendOptimizer.so
zend_optimizer.optimization_level=15

Сохраните файл. Теперь добавьте загрузку .ini файла при старте php. Для этого редактируем файл sudo nano /usr/lib/cgi-bin/php52-cgi

Последнюю строку exec /opt/php5.2/bin/php-cgi меняем на exec /opt/php5.2/bin/php-cgi -c /opt/php5.2/etc/php.ini

Теперь при выводе phpinfo(); вы увидите заветные строчки:

»

Оцените статью
Про Ubuntu — блог о популярном СПО GNU/Linux-дистрибутиве Ubuntu (Убунту Линукс)