Установка нескольких независимых версий PHP на одном веб-сервере Apache
Эта статья описывает метод установки произвольного количества версий PHP на один сервер. При этом все версии будут работать параллельно и обрабатываться одним скриптом.
Суть метода состоит в использовании CGI-обработчиков, которые привязываются по расширению к php-файлам. К примеру, файлы .php449 будут обрабатываться четвёртым PHP, а файлы .php600 шестой версией, и т.д.
Для реализации данного метода требуется уже настроенный веб-сервер Apache, а также доступ в Интернет. Способ установки веб-сервера описан в статье Установка web-сервера (FAMP).
Внимание! CGI-обработчики могут быть "дырой" в безопасности. Если сервер находится под "нагрузкой", то позаботьтесь о дополнительных мерах безопасности. Более подробная информация находится по адресу http://php.net/security.cgi-bin.
------------------ I. Подготовка системы -----------------
Создём папку, где будут лежать архивы с дистрибутивами пхп
zg# mkdir /usr/local/php-dist
Сами архивы можно скачать по следующим адресам
- текущие релизы http://www.php.net/downloads.php
- релиз-кандидаты http://qa.php.net/
- устаревшие релизы http://www.php.net/releases/
- сборки разработчиков http://snaps.php.net/
Будте внимательны! Те ссылки, которые приведены здесь, могут не работать.
Это связано с тем, что актуальность некоторых сборок с течением времени
становится крайне мала. Только релизы, как правило, имеют постоянное место
размещения. Девелоперские сборки и релиз-кандидаты устаревают очень быстро.
------------------ II. Установка PHP 4.4.9 -----------------
Переходим в папку с дистрибутивами пхп
zg# cd /usr/local/php-dist/
Скачиваем исходный код нужной версии пхп
zg# fetch -o php-4.4.9.tar.bz2 http://ru2.php.net/get/php-4.4.9.tar.bz2/from/this/mirror
Распаковываем архив в текущую апаку
zg# tar xf php-4.4.9.tar.bz2
Переходим в папку с исходным кодом
zg# cd php-4.4.9
Конфигурируем пхп с нужными параметрами (опция --disable-cli обязательна!)
zg# ./configure --prefix=/usr/local/php/4.4.9 --disable-cli
Устанавливаем пхп
zg# make install clean
Устанавливаем конфиг php.ini
zg# cp php.ini-dist /usr/local/php/4.4.9/lib/php.ini
------------------ III. Установка PHP 5.3.1RC1 -----------------
Переходим в папку с дистрибутивами пхп
zg# cd /usr/local/php-dist/
Качаем нужную версию пхп
zg# fetch -o php-5.3.1RC1.tar.bz2 http://downloads.php.net/johannes/php-5.3.1RC1.tar.bz2
Распаковываем архив
zg# tar xf php-5.3.1RC1.tar.bz2
Переходим в папку с исходным кодом
zg# cd php-5.3.1RC1
Конфигурируем пхп
zg# ./configure --prefix=/usr/local/php/5.3.1RC1
Устанавливаем пхп
zg# make install clean
Устанавливаем конфиг
zg# cp php.ini-production /usr/local/php/5.3.1RC1/lib/php.ini
------------------ IV. Установка PHP 6 -----------------
Для шестого пхп требуется ICU. У меня его в системе не было, поэтому я его устанавливаю
перед установкой пхп.
zg# pkg_add -r icu
Переходим в папку с дистрибутивами пхп
zg# cd /usr/local/php-dist/
Качаем девелоперскую сборку пхп 6
zg# fetch http://snaps.php.net/php6.0-200909050830.tar.bz2
Распаковываем архим
zg# tar xf php6.0-200909050830.tar.bz2
Переходим в папку с исходным кодом
zg# cd php6.0-200909050830/
Конфигурируем
zg# ./configure --prefix=/usr/local/php/6.0.0
Устанавливаем
zg# make install clean
Устанавливаем конфиг
zg# cp php.ini-production /usr/local/php/6.0.0/lib/php.ini
------------------ IV. Настройка папки cgi-bin -----------------
Определяем текущее положение папки cgi-bin
zg# grep "ScriptAlias /cgi-bin" /usr/local/etc/apache22/httpd.conf
ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"
Переходим в папку cgi-bin
zg# cd /usr/local/www/apache22/cgi-bin/
Создаём символические ссылки на CGI-исполняемые файлы пхп
zg# ln -s /usr/local/php/4.4.9/bin/php php449
zg# ln -s /usr/local/php/5.3.1RC1/bin/php-cgi php531RC1
zg# ln -s /usr/local/php/6.0.0/bin/php-cgi php600
zg# ln -s /usr/local/bin/php-cgi phpLOCAL
Редактируем конфиг апача, чтобы разрешить символические ссылки в cgi-bin
zg# ee /usr/local/etc/apache22/httpd.conf
Находим секцию
И заменяем (или добавляем) Options None на Options FollowSymLinks.
У меня конфиг получился таким:
AllowOverride None
Options FollowSymLinks
Order allow,deny
Allow from all
Сохраняем файл и выходим из редактора.
------------------ V. Настройка папки с несколькими версиями PHP -----------------
Создаём конфиг для папки, в которой будет работать несколько версий пхп
zg# ee /usr/local/etc/apache22/Includes/multi-php.conf
Alias /multi-php/ "/usr/local/www/multi-php/"
# Привязываем разные расширения файлов к разным типам
AddType x-httpd-php-449 .php449
AddType x-httpd-php-531rc1 .php531rc1
AddType x-httpd-php-600 .php600
AddType x-httpd-php-local .phplocal
# Для каждого типа создаём соответствующий CGI-обработчик
Action x-httpd-php-449 /cgi-bin/php449
Action x-httpd-php-531rc1 /cgi-bin/php531RC1
Action x-httpd-php-600 /cgi-bin/php600
Action x-httpd-php-local /cgi-bin/phpLOCAL
Order Deny,Allow
Allow from all
Создаём папку
zg# mkdir -p /usr/local/www/multi-php/
Переходим в папку
zg# cd /usr/local/www/multi-php/
Качаем небольшую формочку для более удобного запуска пхп кода
zg# fetch http://anton-pribora.ru/files/multi-php-eval-form.tar.bz2
Распаковываем архив
zg# tar xf multi-php-eval-form.tar.bz2
Создаём ссылки разных типов на единый файл запуска
zg# ln -s run.php run.php449
zg# ln -s run.php run.php531rc1
zg# ln -s run.php run.php600
zg# ln -s run.php run.phplocal
Перезапускаем апач
zg# apachectl graceful
Теперь можно зайти на http://ваш_адрес/multi-php/ , там должна отобразиться формочка
с возможностью выбора, в какой версии PHP выполнять код.
01 Декабрь 2012 г.
метки: