Настройка PHP 5.2 (через fastcgi) и PHP 5.4 (как модуль Apache2) на одном сервере

Тема в разделе "Администрирование серверов", создана пользователем VeryGood, 17 янв 2014.

  1. VeryGood

    VeryGood

    Регистрация:
    11 дек 2012
    Сообщения:
    216
    Симпатии:
    55
    В силу определенных обстоятельств (наличие старого скрипта), необходимо было установить более старшую версию php (5.2) рядом с существующим php 5.4 на одном сервере, под управлением Debian 7.
    В сети имеется куча материалов по данной теме, однако ни один мануал не помог мне в решении данной задачи в полном объеме - в каждой инструкции появлялась мин. 1 ошибка. В итоге, собрав информацию из разных источников, мне удалось запустить все это добро.

    И так, настройка PHP 5.2 (через fastcgi) и PHP 5.4 (как модуль Apache2) на одном сервере под управлением Debian 7 (64 bit).

    Скачиваем дистрибутив 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
    Устанавливаем зависимости:
    Код:
    aptitude install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-dev make
    Тут, при сборке php 5.2, часто ругается на отсутствие двух библиотек libpng.so и lingjpeg.so. На самом деле они установлены, но сами файлы библиотек PNG и JPEG включают номер версии. В моем случае это были:

    libpng12.а
    libjpeg.so.62.0.0


    Для устранения ошибки необходимо создать символические ссылки непосредственно в папке /usr/lib/ с нужным именем:
    Код:
    ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so.62.0.0 libjpeg.so
    ln -s /usr/lib/x86_64-linux-gnu/libpng12.a libpng.so
    Далее, мануалы нам предлагают свою сборку php, однако в итоге появляется другая ошибка - отсутствие libmysqlclient, однако и эта ошибка устранена.

    Конфигурируем, собираем и ставим из исходников наш php 5.2 в директорию /opt/php5.2:
    Код:
    ./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect
    make
    sudo make install
    Когда всё установиться, можно убедиться в том, что на вашем сервере теперь появилась нужная версия php:
    Код:
    /opt/php5.2/bin/php -v
    Ставим fastcgi:
    Код:
    aptitude install apache2-suexec libapache2-mod-fcgid
    Включаем нужные модули Apache2:
    Код:
    a2enmod cgi fcgid actions
    Перезапускаем Apache, чтобы модули подцепились:
    Код:
    service apache2 restart
    Теперь создадим файл (он будет просто обёрткой, вызывающей наш исполнимый бинарник /opt/php5.2/bin/php-cgi, но с нужными настройками, которые можно будет изменить или дополнить):
    Код:
    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
    Сделаем файл исполнимым:
    Код:
    chmod +x /usr/lib/cgi-bin/php52-cgi
    Теперь создадим необходимую часть конфига для виртуальных хостов, которым потребуется php 5.2:
    Код:
    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
    Теперь достаточно в настройках виртуального хоста добавить импорт php52.conf файла и для этого хоста будет работать PHP 5.2 (например, после DocumentRoot...):
    Код:
    ...
    Include php52.conf
    ...
    Перезапустим Apache, чтобы подцепились новые настройки виртуального хоста:
    Код:
    service apache2 restart
    Для того что прикрутить Zend Optimizer, необходимо скачать совместимую версию с php 5.2.17:
    http://www.zend.com/en/products/guard/downloads-prev?platform=Linux

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

    Код:
    mkdir /usr/local/lib/Zend
    Перемещаем туда файл библиотеки ZendOptimizer.so из нашего архива ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp (если вы распаковывали на сервере, то он уже будет исполнимым, если нет, то сделайте его таковым):

    Создаем файл с конфигурацией для php:
    Код:
    nano /opt/php5.2/etc/php.ini
    Добавляем туда строки:
    Код:
    zend_extension=/usr/local/lib/Zend/ZendOptimizer.so
    zend_optimizer.optimization_level=15
    Сохраняем файл. Теперь добавляем загрузку .ini файла при старте php. Для этого редактируем файл
    Код:
    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
    Таким же методом подключается и ioncube.

    Если где-то ошибся, то прошу поправить, однако именно так мне удалось решить поставленную задачу.
     
    $iD нравится это.