Настройка PHP 5.2 и PHP 5.3 на одном сервере
Настройка PHP 5.2 (через fastcgi) и PHP 5.3 (как модуль Apache2) на одном сервере это возможно!
На одном сервере с одним Apache2 прекрасно заводятся и соседствуют PHP 5.2 (через fastcgi) и PHP 5.3 (как модуль Apache2). Мы далее решим проблему так, что указать какой именно PHP использовать можно будет на уровне настроек виртуального хоста.
Скачиваем дистрибутив php 5.2:
wget http://www.php.net/get/php-5.2.17.tar.gz/from/ru.php.net/mirror
Переименовываем полученный файл во что положено:
mv mirror 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
Конфигурируем, собираем и ставим из исходников наш 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
Если возникают ошибки типа этих:
error: libjpeg.(a|so) not found.
Note that the MySQL client library is not bundled anymore!
Cannot find libmysqlclient under /usr
Они решаются вот таким способом
ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib/libjpeg.so
ln -s /usr/lib/i386-linux-gnu/libpng.so /usr/lib/libpng.so
точно также и с файлами для mysql ну а для особо ленивых есть вот такая команда:
sudo ln -s /usr/lib/i386-linux-gnu/* /usr/lib/
Если запускаете конфигурацию в n-ый раз то надо очистить:
sudo rm -f config.cache
далее после удачного завершения:
make
make test
sudo make install
Данные операции займут много времени! Когда всё установиться, можно убедиться в том, что на вашем сервере теперь появилась нужная версия php такой командой:
/opt/php5.2/bin/php -v
Однако, про этот php пока ничего не знает наш уважаемый веб-сервер Apache2. Мы их познакомим через fastcgi.
Ставим:
sudo aptitude install libapache2-mod-fastcgi
Включаем нужные модули Apache2:
sudo a2enmod cgi fastcgi 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.
Узнать версию PHP используемую на вашем хостинге можно следующим способом. Создайте документ, вставьте этот код на страницу, установите формат ввода PHP code и сохраните документ.
Если необходимо менять стандартные настройки в файде php.ini то его надо создать в папке /opt/php5.2/
Ещё несколько комманд для тестирования php:
/opt/php5.2/bin/php -v
/opt/php5.2/bin/php -m
/opt/php5.2/bin/php --ini
php -v
php-cgi -m