пятница, 3 февраля 2012 г.

Одновременное использование php5.2 и php5.3 на одном сервере Debian Squeeze

Есть сайты которые требуют PHP5.3 а есть такие, на которых интерпретатор выдает кучу ошибок и приходится использовать старый 5.2, я понимаю, если вы держите на серваке один сайт, тогда можно его проапгрейдить и решить проблему модификацией своего скрипта, но вот если у вас сотни сайтов чужих на сервере, то я думаю вам будет лень править чужие скрипты, проще дать возможность запускать разные сайты с разным PHP.

Оригинал инструкции тут http://mbi-solutions.blogspot.com/2011/07/running-php-53-and-php-52-on-same.html, но я исправил кое какие ошибки и дополнил инструкцию




wget http://museum.php.net/php5/php-5.2.17.tar.gz

tar -zxvf php-5.2.17.tar.gz

apt-get install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev  libpng12-dev libjpeg62-dev libxslt1-dev libbz2-dev

cd php-5.2.17

./configure --prefix=/opt/php5.2 \
--with-config-file-path=/opt/php5.2 --with-mysqli \
--with-pdo-mysql --with-mysql --with-curl \
--with-gd --with-jpeg-dir --with-xsl --with-zlib \
--enable-cli --enable-fastcgi --enable-discard-path \
--enable-force-cgi-redirect --with-iconv --with-gettext \
--with-curl --with-bz2 --enable-mbstring=all --enable-zip

make && make install

после успешной установки создаем файл
/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



создаем файл /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



Теперь делаем финальные манипуляции с апачем
apt-get install libapache2-mod-fastcgi
a2enmod cgi fastcgi actions


И перезагружаем апач
/etc/init.d/apache2 restart




Теперь можете добавлять в любой конфиг виртуалхоста строчку

Include php52.conf




но обратите внимание на директорию

<Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
</Directory>



если у вас такого не прописано в конфиге виртуалхоста, то пропишите, иначе будет ругаться на отсутствие доступа.

По аналогии можно подключить например php4 или php6 и адаптировать свою хостинг-панель для возможности выбора версии php.

12 комментариев:

Алексей комментирует...

Спасибо за публикацию. В целом получилось, но мне не удалось задействовать расширения PHP(extentions), в частности fileinfo.so, данные сервера - Ubuntu, Apache, MYSQL, PHP. Что-нибудь посоветуете?

Павел комментирует...

На данный момент я на сессии и нет времени на эксперименты, но могу вам дать путь к решению вашей проблемы, скорей всего расширения цепляются из папки для расширений 5.3, и не совместимы с 5.2

1. в php.ini укажите свою папку в параметре extension_dir

2. скомпилировать и закинуть в папку fileinfo.so

3. в php.ini подключить extension=fileinfo.so

вот инфа для размышлений
http://php.net/manual/ru/ref.fileinfo.php

http://serverfault.com/questions/50426/php-fileinfo-in-custom-php-build-linux

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

DM комментирует...

В tar -jxvf mirror можно без v обходиться, как правило, чаще конфигурится удалённо по SSH — verbose-вывод забивает медленный канал.

/etc/init.d/apache2 restart

можно проще

apache2ctl restart

Там же, в apache2ctl, есть configtest, status и прочие нужности.

Павел комментирует...

Ну да, вы правы про параметр v в таре, просто привычка такая, иногда долго что то распаковываю и непонятно что там происходит. А про медленный канал это уже прошлый век, сейчас сложно найти человека, у которого канал интернета менее 10 мегабит.

Алексей комментирует...

Расширения PHP работают. Причина была в неудачном апгрейде сервера, в частности PHP. Кто использует расширения надо обратить внимание на extension_dir, по умолчанию указывается несуществующая папка, я прописал в php.ini Если используется графическое расширение freetype, можно скомпилировать 5.2.11 версию - есть в сборке, нужно только указать в configure.

Павел комментирует...

Спасибо за то что отписались, думаю что ваш комментарий поможет другим людям, которые столкнутся с данной проблемой

Анонимный комментирует...

танцы с бубном (((

configure: error: libjpeg.(a|so) not found.

при чем
apt-get install libjpeg62-dev
Уже установлена самая новая версия libjpeg62-dev

Павел комментирует...

ls -l /usr/lib |grep libjpeg
-rw-r--r-- 1 root root 217K Июн 30 2010 libjpeg.a
-rw-r--r-- 1 root root 918 Июн 30 2010 libjpeg.la
lrwxrwxrwx 1 root root 17 Фев 3 09:08 libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx 1 root root 17 Авг 8 2011 libjpeg.so.62 -> libjpeg.so.62.0.0
-rw-r--r-- 1 root root 142K Июн 30 2010 libjpeg.so.62.0.0


Обратите внимание на то какие файлы есть в папке /usr/lib и какие симлинки там есть, если чего то нет, то это уже повод для размышлений


если не поможет, то
--with-jpeg-dir=/usr/lib

Анонимный комментирует...

Огромный сенкс, помогло.
кстати таже песня была с libpng

кроме этого рекомендую добавить --enable-mbstring=all

Павел комментирует...

А вы мою статью внимательно читали?

--with-curl --with-bz2 --enable-mbstring=all --enable-zip


я это описывал)))

Анонимный комментирует...

Спасибо за статью, пригодилось.

В статье лишний пробел в
"./configure --prefix=/opt/php5.2 \ "

Павел комментирует...

Можете еще один добавить и он тоже лишним не станет, между параметрами допускается

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