Настройка 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
Поместим в файл следующее:
<FilesMatch ".php"> SetHandler application/x-httpd-php5 </FilesMatch> 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 версию пока ещё можно тут: https://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();
вы увидите заветные строчки: