К животрепещущему вопросу об сборке на базе РНР 5.2
Нашел вот такое изящное решение:
На одном сервере с одним 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
Переименовываем полученный файл во что положено:
Распаковываем архив:
Заходим в директорию:
Устанавливаем зависимости:
Код: Выделить всё
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
Мы, убунтоводы, избалованы готовыми пакетами, так что наберитесь терпения: с непривычки может показаться, что сборка (по команде make) занимает много времени
Когда всё установиться, можно убедиться в том, что на вашем сервере теперь появилась нужная версия php такой командой:
Однако, про этот php пока ничего не знает наш уважаемый веб-сервер Apache2. Мы их познакомим через fastcgi.
Ставим:
Код: Выделить всё
sudo aptitude install libapache2-mod-fastcgi
Включаем нужные модули Apache2:
Перезапускаем Apache, чтобы модули подцепились:
Теперь создадим файл (он будет просто обёрткой, вызывающей наш исполнимый бинарник /opt/php5.2/bin/php-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
Сделаем файл исполнимым:
Теперь создадим необходимую часть конфига для виртуальных хостов, которым потребуется php 5.2:
Поместим в файл следующее:
Код: Выделить всё
<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...):
Перезапустим Apache, чтобы подцепились новые настройки виртуального хоста:
Доп модули, которые понадобились мне в процессе доводки сайта (headers, expires, curl...)
Код: Выделить всё
apt-get install curl libcurl3 libcurl3-dev php5-curl php5-mcrypt
Но после всех манипуляций, при попытке открытия рнр кода на хосте с прописанным РНР 5.2, выдаёт 403 forbidden на выполнение /usr/lib/cgi-bin/php52-cgi
Вопрос - где я дурак. Очень прошу помощи, так, как данное решение отлично подходит для всех нас - 5.2-шных.
Просто проблема в том что нет НИКОГО из близких-далёких знакомых, кто мог бы помочь, у Гугла тоже не могу допроситься, а очень нужен серв и чтоб с PHP 5.2, memcache, nginx.
Жду помощи. Записки из горящего танка
UPD: Как исправить 403-ю ошибку
В apache 2.2 изменили права на DocumentRoot по умолчанию. Предполагается что теперь
нужно разрешать право смотреть на каждом виртуальном хосту. Но если у вас много виртуальных хостов то проще вернуть все на место
в 2.2 по умолчанию
Код: Выделить всё
<Directory />
AllowOverride None
Order Deny,Allow
Deny from all
<Directory>
исправить на
Код: Выделить всё
<Directory />
AllowOverride None
Order Deny,Allow
<Directory>
Мне помогло именно исправление во всех файлах в директории
/etc/apache2/sites-available/