Несколько версий PHP в ISPmanager
Зачастую возникает необходимость обеспечить поддержку сразу нескольких разных версий PHP на одном сервере хостинга, управляемом панелью ISPmanager. В этой панели поддержки такой функции нет, разработчики неоднократно объясняли почему: http://forum.ispsystem.com/ru/showpost.php? p=48511&postcount=2 Поэтому попробуем устранить этот недостаток самостоятельно.Изначально у нас есть сервер под управлением ОС Linux Debian v7.XX amd64 с установленной ISPmanager Lite v4.XX, где из репозитория Dotdeb инсталлирован PHP v5.4.XX. Задача заключается в том, что бы обеспечить также одновременную поддержку версий 5.2.XX и 5.3.XX. Сразу оговорюсь, что излагаемое ниже решение подходит только для использования PHP в Apache как FastCGI.Установить одновременно несколько версий PHP посредством пакетного менеджера APT в Debian невозможно. Поэтому нам придется компилировать их из исходных кодов. Для упрощения этой задачи создан набор скриптов phpfarm. Он представлен в двух вариантах. Оригинальный от Christian Weiske: https://github.com/cweiske/phpfarm И доработанный от François Poirotte: https://github.com/fpoirotte/phpfarm Я использовал последний, поскольку считаю, что он имеет несколько существенных улучшений.
Начнем с того, что установим в систему все необходимые утилиты, библиотеки и файлы заголовков, необходимые для компиляции PHP:
apt-get install -y build-essential git libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libxml2-dev libssl-dev libbz2-dev libcurl3-dev libdb5.1-dev libjpeg-dev libpng-dev libXpm-dev libfreetype6-dev libt1-dev libgmp3-dev libc-client-dev libldap2-dev libmcrypt-dev libmhash-dev freetds-dev libz-dev libmysqlclient-dev ncurses-dev libpcre3-dev unixODBC-dev postgresql-server-dev-9.1 libsqlite-dev libaspell-dev libreadline6-dev librecode-dev libsnmp-dev libtidy-dev libxslt-dev libt1-dev libcurl4-openssl-dev libgdbm-dev libqdbm-dev libdb++-dev php-pear libmagickwand-dev libmagickcore-dev subversion apt-get build-dep -y php5
ln -s /usr/include/qdbm/depot.h /usr/include/depot.h ln -s /usr/lib/libc-client.a /lib/x86_64-linux-gnu/libc-client.a ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a Копируем репозиторий исходных кодов phpfarm:
git clone https://github.com/fpoirotte/phpfarm.git /usr/local/share/phpfarm/ Перед началом компиляции следует обратить особое внимание на то, какие функциональные возможности PHP будут доступны в результате. Для версии 5.2.XX я рекомендую следующий набор опций сборки, которые следует указать в файле »/usr/local/share/phpfarm/src/custom/options-5.2.sh»:
configoptions=»\ --with-regex=php \ --disable-rpath \ --disable-static \ --with-pic \ --with-layout=GNU \ --enable-calendar \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-bcmath \ --with-bz2 \ --enable-ctype \ --without-db4 \ --with-qdbm=/usr \ --without-gdbm \ --with-cdb \ --with-flatfile \ --with-inifile \ --with-iconv \ --enable-exif \ --enable-ftp \ --with-gettext \ --enable-mbstring \ --with-pcre-regex=/usr \ --enable-shmop \ --enable-sockets \ --enable-wddx \ --with-libxml-dir=/usr \ --with-zlib \ --with-kerberos=/usr \ --with-openssl=/usr \ --enable-soap \ --enable-zip \ --with-mhash=yes \ --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysql=/usr \ --with-mysqli=/usr/bin/mysql_config \ --enable-pdo \ --with-pdo-mysql=/usr \ --enable-fastcgi \ --enable-force-cgi-redirect \ --enable-exif \ --with-jpeg-dir=/usr \ --with-png-dir=/usr \ --with-freetype-dir=/usr \ --with-t1lib \ --with-zlib-dir=/usr \ --with-mcrypt=/usr \ --with-mhash \ --with-mime-magic \ --with-xsl=/usr \ --enable-zip \ --enable-cgi \ --with-curl \ --with-gd \ --enable-pcntl \ --enable-mbregex \ --enable-gd-native-ttf \ --enable-dba=shared \ --with-imap \ --with-imap-ssl \ --with-readline=/usr \ --enable-simplexml \ --with-libdir=/lib/x86_64-linux-gnu \ --with-config-file-scan-dir=»$instdir»/etc \ --with-pspell» А для 5.3.XX и 5.4.XX — »/usr/local/share/phpfarm/src/custom/options-5.3.sh» и »/usr/local/share/phpfarm/src/custom/options-5.4.sh» соответственно:
configoptions=»\ --with-regex=php \ --disable-rpath \ --disable-static \ --with-pic \ --with-layout=GNU \ --enable-calendar \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-bcmath \ --with-bz2 \ --enable-ctype \ --with-db4=/usr \ --with-qdbm=/usr \ --without-gdbm \ --with-cdb \ --with-flatfile \ --with-inifile \ --with-iconv \ --enable-exif \ --enable-ftp \ --with-gettext \ --enable-mbstring \ --with-onig=/usr \ --with-pcre-regex=/usr \ --enable-shmop \ --enable-sockets \ --enable-wddx \ --with-libxml-dir=/usr \ --with-zlib \ --with-kerberos=/usr \ --with-openssl=/usr \ --enable-soap \ --enable-zip \ --with-mhash=yes \ --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --enable-pdo \ --with-pdo-mysql=mysqlnd \ --enable-exif \ --with-jpeg-dir=/usr \ --with-png-dir=/usr \ --with-freetype-dir=/usr \ --with-t1lib \ --with-zlib-dir=/usr \ --with-mcrypt=/usr \ --with-mhash \ --with-xsl=/usr \ --enable-zip \ --enable-cgi \ --with-curl \ --with-gd \ --enable-pcntl \ --enable-mbregex \ --enable-gd-native-ttf \ --with-libdir=lib64 \ --enable-dba=shared \ --with-imap \ --with-imap-ssl \ --enable-intl \ --with-readline=/usr \ --enable-simplexml \ --with-libdir=/lib/x86_64-linux-gnu \ --with-config-file-scan-dir=»$instdir»/etc \ --with-pspell» PHP v5.2.XX уже давно не поддерживается. Поэтому исходные коды последней доступной на текущий момент версии 5.2.17 я рекомендую брать не из официальных источников, а у проекта https://code.google.com/p/php52-backports/ Он нацелен на устранение недоработок PHP v5.2.XX в первую очередь связанных с уязвимостями, впрочем, создается такое впечатление, что php52-backports уже тоже больше не развивается.
svn checkout https://php52-backports.googlecode.com/svn/trunk/ /usr/local/share/phpfarm/src/php-5.2.17 Специфичную для Debian ошибку нам придется устранить самостоятельно:
cd /usr/local/share/phpfarm/src/php-5.2.17 wget --content-disposition «https://bugs.php.net/patch-display.php? bug_id=54736&patch=debian_patches_disable_SSLv2_for_openssl_1_0_0.patch&revision=1305414559&download=1» patch -p1 < debian_patches_disable_SSLv2_for_openssl_1_0_0.patch.patch.txt Со скачиванием исходных кодов PHP v5.3.XX и 5.4.XX phpfarm справится сам, поэтому приступаем к компиляции и установке:
cd /usr/local/share/phpfarm/src/ ./main.sh 5.2.17 5.3.28 По окончании этой процедуры в каталоге »/usr/local/share/phpfarm/inst/php-5.X.XX/» получаем PHP нужной версии со всей необходимой для ее работы инфраструктурой.Если же вам потребуется пересобрать PHP, например, с измененным набором опций компиляции, то перед повторным запуском не забудьте выполнить следующий набор команд:
cd /usr/local/share/phpfarm/src/php-5.X.XX make clean Файл настроек располагается в »/usr/local/share/phpfarm/inst/php-5.X.XX/etc/php.ini». Рекомендую в нем сразу прописать опцию «short_open_tag = On». Также необходимо вручную подключить расширение dba, которое компилируется, как внешний модуль. Для этого достаточно создать файл »/usr/local/share/phpfarm/inst/php-5.X.XX/etc/dba.ini» следующего содержания:
extension=dba.so Коснемся темы расширений PHP немного подробнее. Естественно, что через панель управления ISPmanager можно управлять только теми из них, что прилагаются к стандартно установленной версии PHP из подключенных репозиториев APT. Для тех версий, что устанавливаются посредством phpfarm, подключение расширений следует также производить путем их компиляции из исходных кодов. Рассмотрим, как это можно сделать, на примере ImageMagick из репозитория PEAR:
mkdir /usr/local/share/phpfarm/ext cd /usr/local/share/phpfarm/ext
pear download pecl/imagick tar xzvf imagick-3.1.2.tgz cd imagick-3.1.2 make clean /usr/local/share/phpfarm/inst/php-5.X.XX/bin/phpize ./configure --with-php-config=/usr/local/share/phpfarm/inst/php-5.X.XX/bin/php-config make make install make clean Теперь остается только лишь подключить ImageMagick создав файл »/usr/local/share/phpfarm/inst/php-5.X.XX/etc/imagick.ini» следующего содержания:
extension=imagick.so А вот набор команд для установки акселератора XCache:
cd /usr/local/share/phpfarm/ext
wget http://xcache.lighttpd.net/pub/Releases/3.1.0/xcache-3.1.0.tar.gz
tar xzvf xcache-3.1.0.tar.gz
cd xcache-3.1.0
make clean
/usr/local/share/phpfarm/inst/php-5.X.XX/bin/phpize
./configure --with-php-config=/usr/local/share/phpfarm/inst/php-5.X.XX/bin/php-config --enable-xcache
make
make install
cp xcache.ini /usr/local/share/phpfarm/inst/php-5.X.XX/etc/
make clean
Обратите внимание, что все расширения необходимо отдельно компилировать для каждой установленной версии PHP.Смена версии PHP у пользователя панели управления ISPmanager выполняется тривиально. Для этого достаточно лишь изменить строку вызова интерпретатора в файле »/var/www/
Т.е. это версия PHP, установленная в системе стандартно с помощью менеджера пакетов APT. Заменим строку вызова на »#!/usr/local/share/phpfarm/inst/php-5.3.28/bin/php-cgi». Вывод функции PHP phpinfo () будет выглядеть вот так:
И на »#!/usr/local/share/phpfarm/inst/php-5.2.17/bin/php-cgi» получим такой результат при выводе phpinfo ():