Параллельная установка PHP5.2.17 на Debian 7 (Обновлено)

При переносе своих сайтов с webhosting на VPS с Debian 7 amd64 и PHP5.4.4 я столкнулся с тем, что имеющиеся у меня CMS не хотят на данной версии PHP работать - слишком много функций было подавлено или изменнено в PHP5.3 и тем более в PHP5.4, при крайне низкой обратной совместимости. Как временное решение, я параллельно установил PHP5.2.17, на котором работает без ошибок практически любой код с требованием использования PHP не ниже 4.1. Так как в репозитории Debian 7 нет такой версии PHP, то из разных вариантов (альтернативные packages, использование сторонних репозиториев, собственная компиляция) я решил использовать последний, как исключающий любые возможные сторонние вкрапления кода. Для установки PHP5.2.17 я использовал эту инструкцию для хостинг-провайдеров по мультиустановке разных версий PHP, для настройки сайтов на использование данной версии PHP взял фрагмент этого поста. Чистые операции по установке и использованию PHP5.2.17 на Debian 7 amd64 приведены ниже. Все команды выполняются от имени суперпользователя (root):

  • Установка необходимых библиотек для компиляции PHP своими руками:
    Цитата:
    aptitude install php5-dev libxml2-dev libmhash-dev libcurl4-openssl-dev libbz2-dev libmagickwand-dev libpng12-dev libfreetype6-dev libgmp-dev libc-client2007e-dev libpspell-dev libsnmp-dev libtidy-dev libxslt1-dev make build-essential libmcrypt-dev libmysqld-dev libmagic-dev unzip libpq-dev

    Цитата:
    cp /usr/lib/x86_64-linux-gnu/libjpeg.* /usr/lib/
    cp /usr/lib/x86_64-linux-gnu/libpng.* /usr/lib/
    cp /usr/lib/x86_64-linux-gnu/libmysqlclient.* /usr/lib/
    cp /usr/lib/x86_64-linux-gnu/libkrb5.* /usr/lib/
    cp /usr/lib/x86_64-linux-gnu/libssl.* /usr/lib/

  • Создание папок, где будет производится сборка и установка:
    Цитата:
    mkdir /opt/php-5.2.17
    mkdir -p /usr/src/iserver/ && cd /usr/src/iserver/
    mkdir /usr/src/iserver/php-5.2.17/
    cd /usr/src/iserver/php-5.2.17/

  • Скачивание исходных кодов и наложение важных патчей на них:
    Цитата:
    wget -c -t0 http://museum.php.net/php5/php-5.2.17.tar.bz2
    tar jxf php-5.2*tar.bz2

    Цитата:
    wget http://php52-backports.googlecode.com/files/php52-backports-20130717.patch
    patch -p1 < php52-backports-20130717.patch

    Цитата:
    wget http://softnastroy.com/downloads/debian_patches_disable_SSLv2_for_openssl_1_0_0.patch.patch.txt
    patch -p1 < debian_patches_disable_SSLv2_for_openssl_1_0_0.patch.patch.txt

  • Создание конфигурации для правильной компиляции PHP5.2.17 (тут можете что-то изменить под свои потребности, т.к. не все эти параметры можно будет потом переопределить в php.ini):
    Цитата:
    ./configure \
    --prefix=/opt/php-5.2.17 \
    --with-config-file-path=/opt/php-5.2.17 \
    --with-pdo-pgsql \
    --with-zlib-dir \
    --with-freetype-dir \
    --enable-mbstring \
    --with-libxml-dir=/usr \
    --enable-soap \
    --enable-calendar \
    --with-curl=/usr/bin \
    --with-mcrypt \
    --with-zlib \
    --with-gd \
    --with-pgsql \
    --disable-rpath \
    --enable-inline-optimization \
    --with-bz2 \
    --with-zlib \
    --enable-sockets \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-pcntl \
    --enable-mbregex \
    --with-mhash \
    --enable-zip \
    --with-pcre-regex \
    --with-mysql \
    --with-mysql-sock=/var/run/mysqld/mysqld.sock \
    --with-pdo-mysql \
    --with-mysqli \
    --with-jpeg-dir=/usr/lib/x86_64-linux-gnu \
    --with-png-dir=/usr \
    --enable-gd-native-ttf \
    --with-openssl \
    --enable-ftp \
    --with-imap \
    --with-imap-ssl \
    --with-kerberos \
    --with-gettext \
    --enable-cli \
    --enable-fastcgi \
    --enable-discard-path \
    --enable-force-cgi-redirect \
    --enable-cgi \
    --enable-bcmath

  • Сборка и установка PHP:
    Цитата:
    make

    Цитата:
    make install

  • Создание начального конфигурационного файла php.ini:
    Цитата:
    cp /usr/src/iserver/php-5.2.17/php.ini-recommended /opt/php-5.2.17/lib/php.ini

  • Проверка результатов выполненных работ:
    Цитата:
    /opt/php-5.2.17/bin/php -v

    Ответ сервера должен быть следующим:

    PHP 5.2.17 (cli) (built: Mar 20 2013 10:32:00)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

  • Добавление в apache2 поддержки fastcgi:
    Цитата:
    sudo aptitude install apache2-suexec libapache2-mod-fcgid

  • Включаем нужные модули Apache2 и перегружаем его:
    Цитата:
    sudo a2enmod cgi fcgid actions

    Цитата:
    sudo service apache2 restart

  • Создаем файл конфигурации PHP для работы через fastcgi:
    Цитата:
    sudo nano /usr/lib/cgi-bin/php5.2.17-cgi

    В файл поместить следующие команды:
    Цитата:
    #!/bin/sh
    PHPRC="/opt/php-5.2.17/"
    export PHPRC
    PHP_FCGI_CHILDREN=4
    export PHP_FCGI_CHILDREN
    PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_MAX_REQUESTS
    exec /opt/php-5.2.17/bin/php-cgi

    Делаем конфигурационный файл исполнимым:
    Цитата:
    sudo chmod +x /usr/lib/cgi-bin/php5.2.17-cgi

  • Создаем конфигурационный файл для использования PHP5.2.17 в конфигурациях сайтов в apache2:
    Цитата:
    sudo nano /etc/apache2/php5.2.17.conf

    В файл помещаем следующие команды:
    Цитата:

    SetHandler application/x-httpd-php5

    ScriptAlias /php5.2.17-cgi /usr/lib/cgi-bin/php5.2.17-cgi
    Action application/x-httpd-php5 /php5.2.17-cgi
    AddHandler application/x-httpd-php5 .php

  • Теперь одновременно на одном сервере сайты могут работать с использованием разных PHP - "дефолтного" 5.4.4 и 5.2.17 в случае необходимости. Для последних в их конфигурационных файлах необходимо добавить следующую команду:
    Цитата:
    Include php5.2.17.conf

    и перезагрузить конфигурацию apache2 командой
    Цитата:
    sudo service apache2 restart

Теперь у меня сайты работают на PHP5.2.17, а все новые приложения (web-панель администратора, phpmyadmin) - на PHP5.4.4. Со временем и сайты переведу на него.

Updated

После перехода с MySQL 5.5 на 5.6 вскоре обнаружил существенный прирост выделяемой MySQL памяти и что apache error log забит "руганью" про неправильный размер "userspace". Так как данная версия PHP уже не обновляется из репозитория, то пришлось просто заново повторить все эти операции точь-в-точь. И проблема ушла. Но теперь надо проверять такие результаты после каждого обновления MySQL


Отправить новый комментарий

Содержимое этого поля хранится скрыто и не будет показываться публично.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can use BBCode tags in the text.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.

Больше информации о возможностях форматирования

CAPTCHA
Этот вопрос задается для проверки того, не является ли обратная сторона программой-роботом (для предотвращения попыток автоматической регистрации).