Установка нескольких версий 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>
Добрый вечер .
У меня вазникла проблемка при ./configure :
checking for fabsf… yes
checking for floorf… yes
checking for jpeg_read_header in -ljpeg… yes
configure: error: png.h not found.
Чёт не знаю куда копать 😦
Проверьте установлен ли у вас пакет libpng-devel?
Были проблемки с путями . Долго искал — что и как . КОе как установил . НО возникли другие проблемы — не подвязывается MySQL …. Чёт одно за другое цепляется …. ЩАс решил проще — сношу систему 11.04 и накатываю 10.04 LTS . 🙂
1. Опция —with-jpeg неопознана
2. Создаем файл /usr/lib/cgi-bin/php52-cgi а флаг исполнения даем уже php5-cgi, которого нет
исправьте пожалуйста
Всё окей)
Установил на 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 который обновлять, увы, нельзя