Гид по технологиям

Как использовать несколько версий PHP (PHP-FPM и FastCGI) с ISPConfig 3 на CentOS 6.3

9 min read Хостинг Обновлено 27 Nov 2025
Несколько версий PHP в ISPConfig на CentOS 6.3
Несколько версий PHP в ISPConfig на 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.ini
cp /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-pear
cd /opt/php-5.3.22/etc
pecl -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-devel
pecl -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 reload

4 Регистрация версии PHP в ISPConfig

В ISPConfig 3.0.5 и выше новая версия PHP регистрируется в System → Additional PHP Versions. На вкладке Name укажите имя (например, PHP 5.3.22) — это имя будет отображаться в настройках сайта.

Форма добавления дополнительной версии PHP в ISPConfig — вкладка «Name»

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

Параметры PHP-FPM для дополнительной версии PHP в ISPConfig — адрес прослушивания и пути

(Примечание: скриншоты представлены для примера — формы могут незначительно отличаться в вашей версии 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:

  1. Создайте простую страницу phpinfo() в каталоге сайта, который назначен на новую версию PHP.
  1. Убедитесь, что в phpinfo() видна ожидаемая версия PHP, путь к php.ini и установленные расширения (APC, memcache и т.д.).

  2. Проверьте сокет/порт: telnet 127.0.0.1 8999 или netstat -lntp | grep php-fpm

  3. Логи: проверьте логи 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.log

7 Контрольные списки (роль-based)

Системный администратор:

  • Собрать PHP в отдельный префикс.
  • Настроить init-скрипт и автозапуск.
  • Настроить и протестировать пул php-fpm.
  • Зарегистрировать версию в ISPConfig, проверить привязку сайтов.

Разработчик:

  • Протестировать приложение на новой версии PHP (phpinfo, unit/integration тесты).
  • Проверить доступность нужных расширений.
  • Убедиться, что конфигурация php.ini соответствует требованиям приложения.

Оператор поддержки:

  • Проверять логи и метрики (CPU, память, число воркеров).
  • При падении — перезапускать сервис / откатывать к предыдущей версии.

8 Сценарий отката и план восстановления

Если после применения новой версии PHP сайт перестаёт работать:

  1. Отключите привязку в ISPConfig, верните сайт на системную версию PHP (yum-версию).
  2. Остановите проблемный php-fpm: /etc/init.d/php-5.3.22-fpm stop
  3. Если требуется — удалите /opt/php-5.3.22 или переименуйте каталог для быстрой изоляции.
  4. Восстановите из бэкапа конфигурации сайта и 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

  1. План: выберите префиксы (/opt/php-), порты и пул пользователей заранее.
  2. Бэкап: снимите конфигурационные файлы ISPConfig и сайтов перед изменениями.
  3. Сборка: используйте чистую среду сборки, устанавливайте только нужные devel-пакеты.
  4. Тестирование: перед массовым переключением протестируйте 1–2 контрольных сайта.
  5. Мониторинг: после переключения наблюдайте логи и метрики 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, добавьте соответствующие контексты к нестандартным путям.

В конце — краткий план действий для быстрого старта:

  1. Выбрать версию и префикс (/opt/php-5.x.x).
  2. Собрать с нужными опциями (–enable-fpm или –enable-cgi).
  3. Добавить init-скрипт, включить автозапуск.
  4. Установить PECL‑модули в локальную конфигурацию.
  5. Зарегистрировать версию в ISPConfig и протестировать сайт.

Спасибо — удачной настройки.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Настройка TCP/IP в Windows
Сеть

Настройка TCP/IP в Windows

Код-пароль Kindle: установка, изменение и сброс
Руководство

Код-пароль Kindle: установка, изменение и сброс

Установить Dolby Atmos в Windows 11
Аудио

Установить Dolby Atmos в Windows 11

Windows Media Encoder на Windows 10 — установка и альтернативы
Видео софт

Windows Media Encoder на Windows 10 — установка и альтернативы

Отключить сохранение паролей в Google Chrome
браузер

Отключить сохранение паролей в Google Chrome

Переключение веток в Git и на GitHub
GIT

Переключение веток в Git и на GitHub