Зачастую возникает необходимость обеспечить поддержку сразу нескольких разных версий PHP на одном сервере хостинга, управляемом панелью ISPmanager. У нее такой функции нет, разработчики неоднократно объясняли, почему. Поэтому попробуем устранить этот недостаток самостоятельно.
Изначально у нас есть сервер под управлением ОС 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:
Копируем репозиторий исходных кодов phpfarm:
Перед началом компиляции следует обратить особое внимание на то, какие функциональные возможности PHP будут доступны в результате. Для версии 5.2.XX я рекомендую следующий набор опций сборки, которые следует указать в файле "
А для 5.3.XX и 5.4.XX – "
PHP v5.2.XX уже давно не поддерживается. Поэтому исходные коды последней доступной на текущий момент версии 5.2.17 я рекомендую брать не из официальных источников, а у проекта https://code.google.com/p/php52-backports/ Он нацелен на устранение недоработок PHP v5.2.XX в первую очередь связанных с уязвимостями, впрочем, создается такое впечатление, что php52-backports уже тоже больше не развивается.
Специфичную для Debian ошибку нам придется устранить самостоятельно:
Со скачиванием исходных кодов PHP v5.3.XX и 5.4.XX phpfarm справится сам, поэтому приступаем к компиляции и установке:
По окончании этой процедуры в каталоге "
Если же вам потребуется пересобрать PHP, например, с измененным набором опций компиляции, то перед повторным запуском не забудьте выполнить следующий набор команд:
Файл настроек располагается в "
Коснемся темы расширений PHP немного подробнее. Естественно, что через панель управления ISPmanager можно управлять только теми из них, что прилагаются к стандартно установленной версии PHP из подключенных репозиториев APT. Для тех версий, что устанавливаются посредством phpfarm, подключение расширений следует также производить путем их компиляции из исходных кодов. Рассмотрим, как это можно сделать, на примере ImageMagick из репозитория PEAR:
Теперь остается только лишь подключить ImageMagick создав файл "
А вот набор команд для установки акселератора XCache:
Обратите внимание, что все расширения необходимо отдельно компилировать для каждой установленной версии PHP.
Смена версии PHP у пользователя панели управления ISPmanager выполняется тривиально. Для этого достаточно лишь изменить строку вызова интерпретатора в файле
Изначально у нас есть сервер под управлением ОС 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//data/php-bin/php". Вот как выглядит вывод функции PHP phpinfo() при стандартном содержимом: #!/usr/bin/php-cgi. Ссылка на скриншот.
Т.е. это версия 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(): ссылка на скриншот.