Главная > Настройка серверов, Linux, PHP > Установка нескольких версий PHP на Apache (Ubuntu)

Установка нескольких версий PHP на Apache (Ubuntu)

С выходом ветки PHP 5.3 при разработке проектов мы стали ориентироваться на эту версию, к тому же клиенты стали активно обновлять свои хостинги. Однако, большинство проектов было написано под PHP 5.2.x и адаптировать их под новую версию языка не всегда представляется возможным. В связи с этим возникла необходимость установить на компьютере разработчика как минимум две версии PHP (5.2.x и 5.3.x), чтобы они работали на одном сервере Apache.

Одним из популярных способов решения этой проблемы является подключение одной версий PHP к апачу как FastCGI приложение, а другой — обычным способом — как модуль Apache.

Один мой друг написал мануал по настройке сервера таким механизмом. Он призводил установку PHP с Apache на сервер Debian. Эти же шаги легко адаптировать на любую ветку Unix. Я производил настройку Ubuntu 11.04. Итак, руководствуясь инструкцией из блога, делаем настройку.

Для начала нужно определиться, какую версию PHP ставить как модуль, а какую подключать как FastCGI. В репозитории Ubuntu 11.04 по умолчанию идет PHP версии 5.3.5. Таким образом, эту версию можно установить «стандартным» способом как модуль apache.

Теперь, установим PHP 5.2.x, а именно соберем ее из исходников. Скачать ее можно отсюда:  http://us3.php.net/get/php-5.2.17.tar.bz2/from/a/mirror

Последняя версия ветки 5.2 на данный момент — 5.2.17. В результате получится файл php-5.2.17.tar.gz. Распакуем его командой:

tar xzvf php-5.2.17.tar.gz

Установим необходимые для компиляции библиотеки:

apt-get install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libcurl4-openssl-dev libpng12-dev libjpeg62-dev

Подготовим PHP  к сборке:

./configure --prefix=/opt/php5.2 \
--with-config-file-path=/opt/php5.2 \
--with-mysqli \
--with-mysql \
--with-curl \
--with-gd \
--with-jpeg \
--with-jpeg-dir \
--enable-cli \
--enable-fastcgi \
--enable-discard-path \
--enable-force-cgi-redirect

Здесь хочу отметить, что Ubuntu поругалась на отсутствие двух библиотек libpng.so и lingjpeg.so. На само деле они установлены, но сами файлы библиотек PNG и JPEG включают номер версии. В моем случае это были:

libpng12.so

libjpeg.so.62

Для устранения ошибки достаточно создать символические ссылки с нужным именем:

ln -s /usr/lib/libjpeg.so.62 libjpeg.so

ln -s /usr/lib/libpng12.so libpng.so

Теперь скомпилируем и установим PHP:

make

make install

Если у apache не установлен модуль для работы с FastCGI установим его:

apt-get install libapache2-mod-fastcgi

a2enmod fastcgi

Для удобства активируем модуль apache mod_actions:

a2enmod actions

Теперь создадим SH-скрипт, который будет запускать CGI приложение PHP для обработки скриптов:

vi /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/php5-cgi

Создадим конфигурационный файл для apache с настройками обработчика PHP скриптов, нужно сказать серверу, что скрипты должны обрабатываться CGI-приложение PHP 5.2:

vi /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:

<VirtualHost *.80>
........................................
Include php52.conf
.........................................
</VirtualHost>
  1. PadonaK
    1 октября, 2011 в 5:27 пп

    Добрый вечер .
    У меня вазникла проблемка при ./configure :

    checking for fabsf… yes
    checking for floorf… yes
    checking for jpeg_read_header in -ljpeg… yes
    configure: error: png.h not found.

    Чёт не знаю куда копать 😦

  2. lesandr
    2 октября, 2011 в 6:38 пп

    Проверьте установлен ли у вас пакет libpng-devel?

  3. PadonaK
    3 октября, 2011 в 12:28 пп

    Были проблемки с путями . Долго искал — что и как . КОе как установил . НО возникли другие проблемы — не подвязывается MySQL …. Чёт одно за другое цепляется …. ЩАс решил проще — сношу систему 11.04 и накатываю 10.04 LTS . 🙂

  4. 3 февраля, 2012 в 3:22 дп

    1. Опция —with-jpeg неопознана
    2. Создаем файл /usr/lib/cgi-bin/php52-cgi а флаг исполнения даем уже php5-cgi, которого нет

    исправьте пожалуйста

  5. Wohlstand
    8 августа, 2013 в 6:22 пп

    Всё окей)
    Установил на Debian Wheezy
    Только процесс немного отличается:

    Одновременная установка библиотек почему-то привела к выводу ошибки о конфликтах, но когда я установил каждый по-одному, то всё поставилось:
    libxml2-dev
    libmysqlclient-dev
    libcurl4-gnutls-dev
    libcurl4-openssl-dev
    libpng12-dev
    libjpeg62-dev

    А вот что на счёт симлинков на libpng12.so и libjpeg.so.62:
    то они лежат в другой папке:

    ln -s /usr/lib/i386-linux-gnu/libjpeg.so.62 libjpeg.so
    ln -s /usr/lib/i386-linux-gnu/libpng12.so libpng.so

    Симлики создавать непосредственно в папке /usr/lib/ в папке с PHP52 ничего не пройдёт.

    А остальное всё окей, работает, огромное спасибо за эту статью, она спасла меня от нудной замены функций в старом движке Drupal который обновлять, увы, нельзя

  1. 30 апреля, 2014 в 8:58 дп

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