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

Сборка PHP 5.4.12 с PHP-FPM на CentOS

• 6 min read • Серверы • Обновлено 26 Nov 2025
Сборка PHP 5.4.12 с PHP-FPM на CentOS
Сборка PHP 5.4.12 с PHP-FPM на CentOS

Введение

Эта статья описывает, как собрать PHP 5.4.12 из исходников с включённым PHP-FPM и интегрировать его в систему (CentOS/RHEL-подобные дистрибутивы). Подойдёт, если вам нужна отдельная версия PHP для конкретного сайта или панели управления (например, ISPConfig). Коротко: мы скачиваем исходники, собираем с нужными опциями, устанавливаем конфигурационные файлы, создаём init-скрипт, добавляем расширения и регистрируем версию в ISPConfig.

Важно: PHP 5.4 устарел и не получает обновлений безопасности — используйте его только при необходимости и в изолированной среде.

Что нужно знать в одну строку

PHP-FPM — FastCGI Process Manager для PHP, запускает пул процессов PHP для веб-сервера. Сборка из исходников позволяет иметь несколько параллельных версий PHP.

Требования и предварительные шаги

  • Сервер под управлением CentOS/RHEL (или совместимый) с правами root.
  • Набор инструментов разработки и заголовочные файлы библиотек.
  • Достаточно свободного места в /usr/local/src и /opt для установки.

Пример подготовительных команд (выполнить как root):

mkdir /opt/php-5.4.12
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget http://de.php.net/get/php-5.4.12.tar.bz2/from/this/mirror -O php-5.4.12.tar.bz2
tar jxf php-5.4.12.tar.bz2

cd php-5.4.12/

Установка пакетов-разработчиков и заголовочных файлов:

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

Примечание: набор пакетов может отличаться в зависимости от выбранных опций ./configure и версии дистрибутива.

Конфигурация и сборка (configure, make)

Перед запуском configure можно посмотреть все опции:

./configure --help

Рекомендуемый пример команды ./configure для PHP 5.4.12 (подстройте под ваши требования):

./configure \
--prefix=/opt/php-5.4.12 \
--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

Пояснения по ключевым опциям:

  • –prefix: путь установки (мы используем /opt/php-5.4.12 чтобы не мешать системной версии).
  • –enable-fpm: обязательно для сборки с поддержкой PHP-FPM.
  • –with-fpm-user/–with-fpm-group: укажите пользователя, под которым будут работать процессы (nginx или apache).
  • Опции –with-, –enable- влияют на требуемые системные библиотеки: при ошибках сборки проверьте установку соответствующих -devel пакетов.

После configure выполните:

make
make install

Если make возвращает ошибки — проверьте логи, установленные devel-пакеты и опции ./configure.

Размещение конфигурационных файлов

Скопируйте базовые php.ini и конфигурацию php-fpm:

cp /usr/local/src/php5-build/php-5.4.12/php.ini-production /opt/php-5.4.12/lib/php.ini

cp /opt/php-5.4.12/etc/php-fpm.conf.default /opt/php-5.4.12/etc/php-fpm.conf

Откройте /opt/php-5.4.12/etc/php-fpm.conf и измените ключевые параметры.

vi /opt/php-5.4.12/etc/php-fpm.conf

Обратите внимание на строки listen (используйте свободный порт, например 8998), user/group, и добавьте включение пула конфигураций:

| [...] pid = run/php-fpm.pid [...] user = nginx group = nginx [...] listen = 127.0.0.1:8998 [...] include=/opt/php-5.4.12/etc/pool.d/*.conf |

Важно: если в системе уже работает системный php-fpm на порту 9000, используйте другой порт, чтобы не было конфликта.

Создайте каталог для пулов:

mkdir /opt/php-5.4.12/etc/pool.d

Init-скрипт для управления службой

Создайте init-скрипт /etc/init.d/php-5.4.12-fpm с правами исполнения. Пример содержимого (сохраните файл именно с таким содержимым):

vi /etc/init.d/php-5.4.12-fpm

| #! /bin/sh ### BEGIN INIT INFO # Provides: php-5.4.12-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-5.4.12-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-5.4.12/sbin/php-fpm php_fpm_CONF=/opt/php-5.4.12/etc/php-fpm.conf php_fpm_PID=/opt/php-5.4.12/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.4.12-fpm
chkconfig --levels 235 php-5.4.12-fpm on

Запустите службу:

/etc/init.d/php-5.4.12-fpm start

Вы можете увидеть предупреждение, если в каталоге pool.d нет конфигураций пула — это нормально, если вы ещё не создали пула для сайтов:

[root@server1 php-5.4.12]# /etc/init.d/php-5.4.12-fpm start
Starting php-fpm [05-Mar-2013 19:37:55] WARNING: Nothing matches the include pattern '/opt/php-5.4.12/etc/pool.d/*.conf' from /opt/php-5.4.12/etc/php-fpm.conf at line 511.
done
[root@server1 php-5.4.12]#

Установка популярных расширений (APC, memcache, memcached)

Можно установить дополнительные расширения — APC, memcache, memcached через PECL/PEAR. Сначала необходимо установить php-pear (системный пакет PEAR — для управления каналами и установок расширений):

yum install php-pear

Перейдите в конфигурационную директорию PHP, чтобы использовать локальный файл pear.conf:

cd /opt/php-5.4.12/etc
pecl -C ./pear.conf update-channels

Установка APC через PECL:

pecl -C ./pear.conf install apc

Принять значения по умолчанию. Затем добавьте расширение в php.ini:

vi /opt/php-5.4.12/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 (клиент) требует libmemcached-devel:

yum install libmemcached-devel
pecl -C ./pear.conf install memcached

Добавьте в php.ini:

| [...] extension=memcached.so |

После установки расширений перезагрузите PHP-FPM:

/etc/init.d/php-5.4.12-fpm reload

Установка ionCube Loader

ionCube используется для загрузки зашифрованных PHP-скриптов. Скачайте соответствующий пакет для архитектуры сервера (x86_64 или x86) в /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

Скопируйте нужный модуль и подключите в php.ini:

cp ioncube/ioncube_loader_lin_5.4.so /opt/php-5.4.12/lib/php/extensions/no-debug-non-zts-20100525/ioncube.so
vi /opt/php-5.4.12/lib/php.ini

Добавьте строку zend_extension до строки [PHP]:

| zend_extension = /opt/php-5.4.12/lib/php/extensions/no-debug-non-zts-20100525/ioncube.so [PHP] [...] |

Перезагрузите PHP-FPM:

/etc/init.d/php-5.4.12-fpm reload

Интеграция с ISPConfig

В ISPConfig 3.0.5 новую версию PHP можно добавить через Система > Дополнительные версии PHP. На вкладке «Имя» укажите понятное имя (например, PHP 5.4.12) — оно будет отображаться в настройках сайтов.

! Добавление версии PHP в ISPConfig — вкладка имени

Перейдите на вкладку «Настройки PHP-FPM» (панель «FastCGI Settings» можно оставить пустой) и заполните поля в соответствии с местоположением бинарников и конфигураций, например, путь к php-fpm и порту:

! Настройки PHP-FPM в ISPConfig для добавленной версии

После добавления версии она станет доступна в настройках веб-сайта в ISPConfig.

Контрольный список перед запуском в проде

  • Проверить, что порт PHP-FPM свободен и не конфликтует с системным PHP-FPM.
  • Убедиться, что все необходимые -devel пакеты установлены для выбранных опций ./configure.
  • Проверить права и владельцев для папок /opt/php-5.4.12 и /opt/php-5.4.12/var/run.
  • Добавить конфигурации пулов в /opt/php-5.4.12/etc/pool.d для каждого сайта.
  • Настроить логирование и ротацию логов (logrotate).
  • Тестировать на staging перед запуском в production.

Типичные проблемы и решения (Troubleshooting)

  • configure завершился с ошибкой «missing header» — установите соответствующий пакет-devel и повторите.
  • make выдал ошибку компоновки (undefined reference) — проверьте версию библиотек и опции configure, возможно, требуется libdir=x86 или lib64.
  • Служба не стартует, PID-файл не создаётся — проверьте права на /opt/php-5.4.12/var/run и лог php-fpm (error_log в php-fpm.conf).
  • Расширения не загружаются — убедитесь, что путь к расширениям совпадает с расширениями, собранными для вашей версии (no-debug-non-zts-20100525 в пути может отличаться для другой сборки).

Безопасность и рекомендации

  • Ограничьте доступ к сокету/порту php-fpm с помощью firewall/локальных правил (iptables, firewalld).
  • Запускайте воркеры PHP под непривилегированными пользователями (nginx/apache) и создавайте отдельные пула на сайт для минимизации прав.
  • Не используйте устаревшие PHP-версии в общедоступных средах без дополнительных мер контроля (WAF, IPS/IDS, регулярный мониторинг).

Совместимость и миграция

  • Если у вас на сервере уже есть системная версия PHP-FPM, используйте отдельный порт или UNIX-сокет с уникальным путём.
  • Тестируйте расширения и кэширования (APC) — настройки SHM и TTL могут требовать корректировок под нагрузку.
  • Для переноса конфигураций пула между версиями проверьте соответствие опций pool конфигов, некоторые директивы могли появиться или измениться в разных версиях PHP-FPM.

Быстрые команды — шпаргалка

  • Сборка и установка:
./configure [опции]
make
make install
  • Управление службой:
/etc/init.d/php-5.4.12-fpm start|stop|restart|reload
chkconfig --levels 235 php-5.4.12-fpm on
  • Перезагрузить после изменения php.ini:
/etc/init.d/php-5.4.12-fpm reload

Мини-методология развёртывания (шаги)

  1. Подготовить тестовый сервер и установить требуемые devel-пакеты.
  2. Собрать PHP с нужными опциями в /opt и протестировать локально.
  3. Настроить пул(ы) в /opt/…/etc/pool.d для каждого сайта.
  4. Интегрировать версию в панель управления (ISPConfig) и привязать к сайту в тестовом окружении.
  5. Тестировать нагрузочное поведение и корректность расширений.
  6. Перенести в production с откатом и мониторингом.

Краткий глоссарий

  • PHP-FPM: менеджер процессов FastCGI для PHP.
  • PECL/PEAR: система управления пакетами расширений PHP.
  • ionCube: загрузчик для защищённых (зашифрованных) PHP-скриптов.
  • pool.d: каталог с конфигурациями пулов процессов PHP-FPM.

Критерии приёмки

  • PHP-FPM успешно запускается и слушает указанный порт/сокет.
  • Расширения (apc, memcache/memcached, ionCube) загружены и отображаются в phpinfo().
  • Веб-сайт, использующий новую версию PHP, работает корректно в ISPConfig.
  • Логи ошибок пусты или не содержат критичных сообщений в течение тестового периода.

Итог / Summary

Сборка PHP 5.4.12 из исходников даёт гибкость при наличии нескольких версий PHP на одном сервере. Процесс включает установку зависимостей, конфигурацию опций сборки, создание init-скрипта, установку расширений и интеграцию с панелью управления. Важно протестировать всё в тестовой среде и учитывать риски безопасности, связанные с использованием устаревшей версии PHP.

Важно: по возможности планируйте миграцию на поддерживаемые версии PHP и минимизируйте использование устаревших релизов в публичных средах.

Ключевые выводы:

  • Сборка из исходников позволяет изолировать версии и устанавливать пользовательские опции.
  • Обязательно установите все требуемые -devel пакеты для успешной сборки.
  • Контролируйте доступ к PHP-FPM через порты/сокеты и запускайте процессы под непривилегированными пользователями.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро