Как использовать несколько версий PHP (PHP-FPM и FastCGI) с ISPConfig 3 на CentOS 6.3
Вы можете собрать и запустить несколько локально установленных версий PHP (пример: 5.3.22 и 5.4.12) на одном сервере с ISPConfig 3.0.5 и выше, используя PHP-FPM или FastCGI. Соберите каждую версию в отдельный префикс (например, /opt/php-5.3.22 и /opt/phpfcgi-5.3.22), настройте сервисы (init-скрипты для CentOS 6), добавьте расширения (APC, memcache, memcached, ionCube) и затем зарегистрируйте версию в ISPConfig через System → Additional PHP Versions.
Важно: приведённая инструкция рассчитана на CentOS 6.3 с классической инициализацией SysV (init). Для других дистрибутивов или systemd шаги по сервисам будут отличаться.
О чём эта статья
Этот пошаговый руководствo переводит и адаптирует оригинальный материал по сборке и подключению нескольких версий PHP (PHP-FPM и FastCGI) к ISPConfig 3 на CentOS 6.3. Включены расширенные пояснения: когда использовать PHP-FPM или FastCGI, альтернативные подходы, контрольные списки, отладка, безопасность и сценарий отката.
Кому полезно
- Системным администраторам, которые управляют хостинг-платформой на ISPConfig.
- Разработчикам, которым требуется разный runtime PHP для разных сайтов на одном сервере.
- Техлидам, планирующим миграцию приложений старых версий PHP.
1 Предварительная заметка
Я буду собирать PHP 5.3.22 и PHP 5.4.12 — актуальные версии семейства 5.3 и 5.4 на момент исходной публикации. В руководстве также показано, как установить дополнительные расширения: APC, memcache, memcached и ionCube Loader.
Коротко о терминах:
- PHP-FPM — FastCGI Process Manager; позволяет PHP работать как отдельный пул воркеров и лучше подходит для nginx и современных конфигураций Apache+mod_proxy_fcgi.
- FastCGI (через –enable-cgi) — классический CGI/FastCGI режим, чаще применяется с Apache (mod_fcgid или mod_fastcgi).
Важно: в примере PHP-FPM и FastCGI строятся по-разному (флаги конфигурации –enable-fpm или –enable-cgi). Можно скомпилировать одну и ту же версию PHP дважды с разными префиксами, если нужно иметь обе реализации одновременно.
2 Сборка PHP 5.3.22 (PHP-FPM)
Ниже — подробные команды и комментарии. Сохраняйте отдельные префиксы для каждой собранной версии, чтобы избежать конфликтов.
Создаём каталоги и скачиваем исходники:
mkdir /opt/php-5.3.22 mkdir /usr/local/src/php5-build cd /usr/local/src/php5-build wget http://de.php.net/get/php-5.3.22.tar.bz2/from/this/mirror -O php-5.3.22.tar.bz2 tar jxf php-5.3.22.tar.bz2
cd php-5.3.22/Устанавливаем зависимости для сборки (группа Development Tools и набор devel-пакетов):
yum groupinstall 'Development Tools'yum install libxml2-devel libXpm-devel gmp-devel libicu-devel t1lib-devel aspell-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libvpx-devel libpng-devel freetype-devel readline-devel libtidy-devel libxslt-devel libmcrypt-devel pcre-devel curl-devel mysql-devel ncurses-devel gettext-devel net-snmp-devel libevent-devel libtool-ltdl-devel libc-client-devel postgresql-develКонфигурируем и собираем PHP 5.3.22 для PHP-FPM. Вы можете настроить ./configure под свои нужды — используйте ./configure –help, чтобы увидеть все опции. Если вы меняете набор опций, для сборки могут потребоваться дополнительные библиотеки.
./configure
–prefix=/opt/php-5.3.22
–with-pdo-pgsql
–with-zlib-dir
–with-freetype-dir
–enable-mbstring
–with-libxml-dir=/usr
–enable-soap
–enable-calendar
–with-curl
–with-mcrypt
–with-zlib
–with-gd
–with-pgsql
–disable-rpath
–enable-inline-optimization
–with-bz2
–with-zlib
–enable-sockets
–enable-sysvsem
–enable-sysvshm
–enable-pcntl
–enable-mbregex
–with-mhash
–enable-zip
–with-pcre-regex
–with-mysql
–with-pdo-mysql
–with-mysqli
–with-jpeg-dir=/usr
–with-png-dir=/usr
–enable-gd-native-ttf
–with-openssl
–with-fpm-user=nginx
–with-fpm-group=nginx
–with-libdir=lib64
–enable-ftp
–with-imap
–with-imap-ssl
–with-kerberos
–with-gettext
–enable-fpm
Последний ключ –enable-fpm включает поддержку PHP-FPM. Если вы хотите использовать эту сборку с Apache, укажите –with-fpm-user=apache и –with-fpm-group=apache; для nginx используйте nginx.
Сборка и установка:
make make install
Копируем php.ini и конфигурацию php-fpm в целевые каталоги:
cp /usr/local/src/php5-build/php-5.3.22/php.ini-production /opt/php-5.3.22/lib/php.inicp /opt/php-5.3.22/etc/php-fpm.conf.default /opt/php-5.3.22/etc/php-fpm.confОткрываем /opt/php-5.3.22/etc/php-fpm.conf и корректируем настройки. В строке listen используйте свободный порт (например, 8999 — 9000 может быть занят системным PHP-FPM). В конце файла добавьте include=/opt/php-5.3.22/etc/pool.d/*.conf для подключения пулов.
vi /opt/php-5.3.22/etc/php-fpm.confПример ключевых фрагментов (оставлено для понятности):
[...]
pid = run/php-fpm.pid
[...]
user = nginx
group = nginx
[...]
listen = 127.0.0.1:8999
[...]
include=/opt/php-5.3.22/etc/pool.d/*.confСоздаём директорию пулов:
mkdir /opt/php-5.3.22/etc/pool.dСоздаём init-скрипт для управления сервисом (CentOS 6 — SysV init):
vi /etc/init.d/php-5.3.22-fpmСодержимое init-скрипта (оставляем без изменений для корректного запуска):
| #! /bin/sh ### BEGIN INIT INFO # Provides: php-5.3.22-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-5.3.22-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-5.3.22/sbin/php-fpm php_fpm_CONF=/opt/php-5.3.22/etc/php-fpm.conf php_fpm_PID=/opt/php-5.3.22/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac |
Делим скрипт исполняемым и включаем автозапуск:
chmod 755 /etc/init.d/php-5.3.22-fpm chkconfig –levels 235 php-5.3.22-fpm on
Запускаем сервис:
/etc/init.d/php-5.3.22-fpm startЕсли пулов ещё нет, увидите предупреждение — его можно игнорировать до создания pool.d/*.conf:
[root@server1 php-5.3.22]# /etc/init.d/php-5.3.22-fpm start Starting php-fpm [05-Mar-2013 17:34:54] WARNING: Nothing matches the include pattern ‘/opt/php-5.3.22/etc/pool.d/*.conf’ from /opt/php-5.3.22/etc/php-fpm.conf at line 511. done [root@server1 php-5.3.22]#
Теперь можно установить дополнительные модули (APC, memcache, memcached, ionCube).
3 Установка расширений (APC, memcache, memcached, ionCube)
Для установки APC, memcache и memcached мы воспользуемся PECL/PEAR, поэтому сначала ставим php-pear и настраиваем локальную конфигурацию PEAR для новой версии:
yum install php-pearcd /opt/php-5.3.22/etcpecl -C ./pear.conf update-channelsУстановка APC:
pecl -C ./pear.conf install apcПосле установки добавьте в /opt/php-5.3.22/lib/php.ini:
vi /opt/php-5.3.22/lib/php.iniИ в конец файла добавьте:
| [...] extension=apc.so apc.enabled=1 apc.shm_size=128M apc.ttl=0 apc.user_ttl=600 apc.gc_ttl=600 apc.enable_cli=1 apc.mmap_file_mask=/tmp/apc.XXXXXX ;apc.mmap_file_mask=/dev/zero ;apc.shm_segments = 5 |
Установка memcache:
pecl -C ./pear.conf install memcacheДобавьте в php.ini:
| [...] extension=memcache.so |
Установка memcached (нужны dev-заголовки libmemcached):
yum install libmemcached-develpecl -C ./pear.conf install memcachedИ в php.ini:
| [...] extension=memcached.so |
Установка ionCube Loader (зависит от архитектуры сервера):
cd /tmpДля x86_64:
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz tar xfvz ioncube_loaders_lin_x86-64.tar.gz
Для x86:
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz tar xfvz ioncube_loaders_lin_x86.tar.gz
Далее:
cp ioncube/ioncube_loader_lin_5.3.so /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so vi /opt/php-5.3.22/lib/php.ini
Добавьте в начало файла (перед [PHP]):
| zend_extension = /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so [PHP] [...] |
Перезагрузите PHP-FPM:
/etc/init.d/php-5.3.22-fpm reload4 Регистрация версии PHP в ISPConfig
В ISPConfig 3.0.5 и выше новая версия PHP регистрируется в System → Additional PHP Versions. На вкладке Name укажите имя (например, PHP 5.3.22) — это имя будет отображаться в настройках сайта.

На вкладке PHP-FPM Settings (вкладку FastCGI можно оставить пустой, если вы собирали FPM-версию) заполните поля: укажите путь к php.ini, путь к php-fpm исполняемому файлу или адресу прослушивания (127.0.0.1:8999), путь к php-fpm пулу и пр. Пример визуала ниже:

(Примечание: скриншоты представлены для примера — формы могут незначительно отличаться в вашей версии ISPConfig.)
5 Как выбирать: PHP-FPM vs FastCGI — краткая инструкция
- Используйте PHP-FPM когда:
- Вы применяете nginx либо Apache с mod_proxy_fcgi.
- Нужна лучшая изоляция процессов и управление пулом воркеров.
- Требуется более стабильная производительность под высокой нагрузкой.
- Используйте FastCGI (mod_fcgid/mod_fastcgi) когда:
- Вы ограничены окружением, где модуль PHP-FPM недоступен.
- У вас старая конфигурация Apache и нет возможности перейти на proxy_fcgi.
Counterexample / когда это не сработает:
- Если ваше приложение зависит от системного RPM-PHP (yum) и вы не хотите менять пути include/инструменты — сборка в /opt может требовать корректировки конфигураций других сервисов.
Альтернативные подходы:
- Использовать репозитории Remi/Remi-safe или SCL (Software Collections) для установки нескольких версий PHP через RPM.
- Применять контейнеры (Docker) для изоляции различных приложений с разными версиями PHP.
- PHPBrew или phpenv для сборки и управления версиями в пользовательской среде.
6 Отладка и тестирование
Шаблон проверки работоспособности новой версии PHP:
- Создайте простую страницу phpinfo() в каталоге сайта, который назначен на новую версию PHP.
Убедитесь, что в phpinfo() видна ожидаемая версия PHP, путь к php.ini и установленные расширения (APC, memcache и т.д.).
Проверьте сокет/порт: telnet 127.0.0.1 8999 или netstat -lntp | grep php-fpm
Логи: проверьте логи php-fpm (обычно /opt/php-5.3.22/var/log или по пути, указанному в php-fpm.conf) и системные логи Apache/nginx.
Примеры полезных команд:
netstat -plnt | grep 8999
ps aux | grep php-fpm
tail -n 100 /opt/php-5.3.22/var/log/php-fpm.log7 Контрольные списки (роль-based)
Системный администратор:
- Собрать PHP в отдельный префикс.
- Настроить init-скрипт и автозапуск.
- Настроить и протестировать пул php-fpm.
- Зарегистрировать версию в ISPConfig, проверить привязку сайтов.
Разработчик:
- Протестировать приложение на новой версии PHP (phpinfo, unit/integration тесты).
- Проверить доступность нужных расширений.
- Убедиться, что конфигурация php.ini соответствует требованиям приложения.
Оператор поддержки:
- Проверять логи и метрики (CPU, память, число воркеров).
- При падении — перезапускать сервис / откатывать к предыдущей версии.
8 Сценарий отката и план восстановления
Если после применения новой версии PHP сайт перестаёт работать:
- Отключите привязку в ISPConfig, верните сайт на системную версию PHP (yum-версию).
- Остановите проблемный php-fpm: /etc/init.d/php-5.3.22-fpm stop
- Если требуется — удалите /opt/php-5.3.22 или переименуйте каталог для быстрой изоляции.
- Восстановите из бэкапа конфигурации сайта и php.ini при необходимости.
Критерии приёмки:
- phpinfo() показывает ожидаемую версию.
- Ключевые функциональные тесты приложения проходят.
- Метрики нагрузки находятся в допустимых пределах.
9 Советы по безопасности и совместимости
- Запускайте php-fpm-пулы под непривилегированными пользователями (apache или nginx) и отдельно для сайтов с разным уровнем доверия.
- Проверяйте разрешения и владельцев файлов в /opt/php-*/ и в web-каталогах.
- Если на сервере включен SELinux — настройте контексты; по умолчанию SELinux может блокировать нестандартные пути и сокеты.
- Учитывайте, что некоторые расширения и сборки различаются между архитектурами (x86/x86_64).
Совместимость:
- Старые приложения, рассчитанные на PHP 5.2, могут не работать на 5.3/5.4 без правок.
- Расширения, собранные для одной ABI, несовместимы с другой (учтите путь no-debug-non-zts-20090626 для 5.3).
10 Альтернативы и миграционные варианты
- RPM-пакеты (Remi, SCL): проще в установке и управлении, улучшают совместимость с системой обновлений.
- Контейнеризация (Docker): полная изоляция версий PHP, подходит при массовой разнотоновости окружений.
- Использование php-fpm из дистрибутива и кастомных FastCGI только для отдельных сайтов.
11 Таблица совместимости (кратко)
- PHP 5.3.x: поддерживает FPM (с 5.3), расширения APC/memcache доступны через PECL.
- PHP 5.4.x: FPM доступен и рекомендуется; обратите внимание на изменения в поведении сессий и mbstring.
- FastCGI: доступен на всех 5.x при сборке с –enable-cgi; лучше для старых Apache-конфигураций.
12 Решение типичных проблем
Проблема: php-fpm не стартует — смотрите логи /opt/php-*/var/log и убедитесь в корректности путей, права на pid-файл и порта.
Проблема: PECL использует системный php вместо собранного — убедитесь, что при запуске pecl вы используете локальную конфигурацию: pecl -C ./pear.conf … и находитесь в /opt/php-…/etc.
Проблема: расширения не загружаются — проверьте строки extension=*.so в нужном php.ini и путь к каталогу extensions (phpinfo()).
13 Мини‑методология: безопасная сборка разных версий PHP
- План: выберите префиксы (/opt/php-
), порты и пул пользователей заранее. - Бэкап: снимите конфигурационные файлы ISPConfig и сайтов перед изменениями.
- Сборка: используйте чистую среду сборки, устанавливайте только нужные devel-пакеты.
- Тестирование: перед массовым переключением протестируйте 1–2 контрольных сайта.
- Мониторинг: после переключения наблюдайте логи и метрики 24–72 часа.
14 Чек-лист перед переключением сайта на новую версию PHP
- phpinfo() соответствует нужной версии и путям
- Все требуемые расширения установлены и активны
- Права и владельцы файлов корректны
- Резервная копия конфигурации и данных сделана
- План отката протестирован
15 Краткий глоссарий (1‑строчная формулировка)
- PHP-FPM — менеджер процессов FastCGI для PHP; управляет пулом воркеров.
- FastCGI — протокол обмена между веб-сервером и внешним интерпретатором.
- PECL — репозиторий и инструмент для установки расширений PHP.
16 Заключение и рекомендации
Сборка и регистрация нескольких версий PHP в ISPConfig даёт гибкость: можно запускать разные сайты на оптимальных версиях PHP. На продакшене рекомендуется:
- Предпочитать пакеты rpm/SCL или контейнеры для упрощения управления, обновлений и безопасности.
- Если собираете вручную — держать версии в отдельных префиксах и корректно управлять сервисами.
Краткое резюме действий:
- Собрать PHP с –enable-fpm в отдельный каталог.
- Настроить init-скрипт и пул php-fpm.
- Установить расширения через PECL (в локальной конфигурации).
- Добавить версию в ISPConfig → System → Additional PHP Versions и протестировать сайт.
Примеры команд проверки (сводная шпаргалка)
/etc/init.d/php-5.3.22-fpm start
/etc/init.d/php-5.3.22-fpm reload
tail -f /opt/php-5.3.22/var/log/php-fpm.log
netstat -plnt | grep 8999
php -v # если вы используете локальный php-cli, укажите путь /opt/php-5.3.22/bin/php -vИтог: используя отдельные префиксы для каждой версии PHP и правильно настраивая php-fpm/fastcgi, вы получаете гибкую платформу для размещения сайтов с разными требованиями к PHP.
Список полезных ресурсов и заметки
- Для других дистрибутивов (Debian/Ubuntu, CentOS 7+) шаги по управлению сервисом и пакеты отличаются (systemd, yum/dnf, apt). Адаптируйте init-скрипты под systemd unit, если нужно.
- Если вы используете SELinux, добавьте соответствующие контексты к нестандартным путям.
В конце — краткий план действий для быстрого старта:
- Выбрать версию и префикс (/opt/php-5.x.x).
- Собрать с нужными опциями (–enable-fpm или –enable-cgi).
- Добавить init-скрипт, включить автозапуск.
- Установить PECL‑модули в локальную конфигурацию.
- Зарегистрировать версию в ISPConfig и протестировать сайт.
Спасибо — удачной настройки.
Похожие материалы
Настройка TCP/IP в Windows
Код-пароль Kindle: установка, изменение и сброс
Установить Dolby Atmos в Windows 11
Windows Media Encoder на Windows 10 — установка и альтернативы
Отключить сохранение паролей в Google Chrome