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

Как собрать PHP 5.6-beta3 (PHP-FPM и FastCGI) с ionCube Loader, Zend OPcache и APCu для ISPConfig 3 (Debian Wheezy)

8 min read Инфраструктура Обновлено 28 Nov 2025
PHP 5.6 с ionCube, OPcache и APCu для ISPConfig
PHP 5.6 с ionCube, OPcache и APCu для ISPConfig

В этой инструкции шаг за шагом показано, как собрать и установить PHP 5.6.0beta3 на Debian Wheezy как версию для PHP-FPM и как версию для FastCGI, подключить Zend OPcache, APCu и ionCube Loader, а также как добавить новую версию PHP в ISPConfig 3. Включены команды, init-скрипт для запуска php-fpm, установка расширений через PECL/PEAR и советы по отладке и безопасности.

Важно: приведённые команды предполагают права root и базовую конфигурацию Debian Wheezy. Прежде чем менять систему в продакшне, протестируйте на стенде.

О чём эта инструкция

Эта статья показывает, как собрать PHP 5.6.0beta3 из исходников и подготовить два типа сборки:

  • PHP-FPM — современный менеджер процессов, работает как с nginx, так и с Apache через Proxy/FastCGI.
  • FastCGI (PHP-CGI) — классический способ для Apache с mod_fcgid или аналогами.

В статью включены инструкции по установке APCu, memcache, memcached (где возможно) и ionCube Loader. Также показано, как зарегистрировать собранную версию в ISPConfig 3 (через System > Additional PHP Versions).

Краткие определения:

  • PHP-FPM: FastCGI Process Manager — управляющая система процессов для PHP.
  • FastCGI: протокол для взаимодействия веб-сервера и интерпретатора.

Требования и примечания перед началом

  • ОС: Debian Wheezy (x86_64 или x86) с root-доступом.
  • Набор инструментов для сборки (build-essential) и зависимости для PHP.
  • ISPConfig 3.0.5 или новее для поддержки нескольких версий PHP.

Примечания:

  • PHP-FPM и FastCGI в этой сборке взаимоисключающи для одной и той же директории установки. Можно собрать PHP дважды: один раз с –enable-fpm в /opt/php-5.6.0beta3 и второй раз с –enable-cgi в /opt/phpfcgi-5.6.0beta3.
  • В примерах используются пути /opt/php-5.6.0beta3 и /usr/local/src/php5-build.
  • Если вы используете отличные опции ./configure, могут потребоваться дополнительные библиотеки.

Подготовка исходников и окружения

Скачиваем исходники и распаковываем:

mkdir /opt/php-5.6.0beta3 mkdir /usr/local/src/php5-build cd /usr/local/src/php5-build wget http://downloads.php.net/tyrael/php-5.6.0beta3.tar.bz2 tar jxf php-5.6.0beta3.tar.bz2

cd php-5.6.0beta3/

Устанавливаем базовые пакеты и зависимости для сборки:

apt-get install build-essential apt-get build-dep php5 apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev

Если вы собираете с –with-imap, создайте символьную ссылку на libc-client.a для правильного обнаружения библиотеки:

ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

(Это нужно только при использовании –with-imap; в противном случае ./configure при проверке imap выдаст ошибку о невозможности найти libc-client.a.)

Конфигурация и сборка для PHP-FPM

Пример команды ./configure — подстраивайте опции под ваши требования. Для справки используйте ./configure –help.

./configure
–prefix=/opt/php-5.6.0beta3
–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
–enable-exif
–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=www-data
–with-fpm-group=www-data
–with-libdir=/lib/x86_64-linux-gnu
–enable-ftp
–with-imap
–with-imap-ssl
–with-kerberos
–with-gettext
–with-xmlrpc
–enable-opcache
–enable-fpm

Примечание: флаг –enable-fpm включает поддержку PHP-FPM.

Собираем и устанавливаем:

make make test make install

Копируем шаблон php.ini и конфигурацию php-fpm в директорию установки:

cp /usr/local/src/php5-build/php-5.6.0beta3/php.ini-production /opt/php-5.6.0beta3/lib/php.ini cp /opt/php-5.6.0beta3/etc/php-fpm.conf.default /opt/php-5.6.0beta3/etc/php-fpm.conf

Открываем /opt/php-5.6.0beta3/etc/php-fpm.conf и вносим изменения:

  • В параметре listen указываем свободный адрес/порт, например 127.0.0.1:8999 (порт 9000 может быть занят системным php-fpm).
  • В конце файла добавляем include=/opt/php-5.6.0beta3/etc/pool.d/*.conf

Пример фрагмента конфигурации, который нужно получить:

[...]
pid = run/php-fpm.pid
[...]
user = www-data
group = www-data
[...]
listen = 127.0.0.1:8999
[...]
include=/opt/php-5.6.0beta3/etc/pool.d/*.conf

Создаём директорию пулов процессов:

mkdir /opt/php-5.6.0beta3/etc/pool.d/

Init-скрипт для управления php-fpm

Создаём init-скрипт /etc/init.d/php-5.6.0-fpm со следующим содержимым (оставляем команды без изменений):

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

Запускаем сервис:

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

Если пулов ещё не создано, вы увидите предупреждение об отсутствии включаемых файлов — это нормально до тех пор, пока вы не добавите файлы конфигурации пулов.

Пример вывода при запуске без пулов:

root@server1:~# /etc/init.d/php-5.6.0-fpm start
Starting php-fpm [22-May-2014 03:14:39] WARNING: Nothing matches the include pattern '/opt/php-5.6.0beta3/etc/pool.d/*.conf' from /opt/php-5.6.0beta3/etc/php-fpm.conf at line 529.
done
root@server1:~#

Включение Zend OPcache

Открываем php.ini и добавляем в конец файла:

[...]
zend_extension=opcache.so

После этого OPcache будет доступен в этой сборке PHP.

Установка PEAR/PECL и расширений (APCu, memcache)

Устанавливаем php-pear и php5-dev в систему (это нужно для сборки расширений через pecl):

apt-get -y install php-pear php5-dev

Переходим в директорию конфигурации PHP и обновляем каналы:

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

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

pecl -C ./pear.conf install channel://pecl.php.net/apcu-4.0.4

Во время установки принимаем значения по умолчанию. Затем добавляем в /opt/php-5.6.0beta3/lib/php.ini:

[...]
extension=apcu.so
apc.enabled=1
apc.shm_size=128M
apc.ttl=0
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:

pecl -C ./pear.conf install memcache

Добавляем в php.ini:

[...]
extension=memcache.so

Примечание: в beta3 memcached может не поддерживаться корректно — тестируйте и проверяйте совместимость.

Установка ionCube Loader

ionCube предоставляет проприетарный загрузчик для шифрованных PHP-скриптов. Скачайте пакет для вашей архитектуры в /tmp и распакуйте:

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

Копируем соответствующую библиотеку в директорию расширений PHP и добавляем директиву zend_extension в начало php.ini (перед строкой [PHP]):

cp ioncube/ioncube_loader_lin_5.5.so /opt/php-5.6.0beta3/lib/php/extensions/no-debug-non-zts-20131226/ioncube.so

Открываем /opt/php-5.6.0beta3/lib/php.ini и добавляем первой строкой:

zend_extension = /opt/php-5.6.0beta3/lib/php/extensions/no-debug-non-zts-20131226/ioncube.so
[PHP]
[...]

После этого перезагрузите PHP-FPM:

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

Проверьте в phpinfo(), что ionCube загружен.

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

В ISPConfig 3.0.5 добавьте новую версию PHP через System > Additional PHP Versions.

На вкладке Name укажите понятное имя, например PHP 5.6.0beta3 — это имя появится в настройках сайтов и позволит выбирать эту версию PHP для конкретного веб-сайта.

Добавление версии PHP в ISPConfig

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

Настройки PHP-FPM в ISPConfig

Прописывайте адрес (например 127.0.0.1:8999) и другие параметры по вашему окружению.

Сборка версии PHP для FastCGI (если нужен Apache mod_fcgid)

Если вы хотите собрать отдельную копию PHP как FastCGI-бинарник для Apache (не FPM), повторите сборку, но с ключом –enable-cgi вместо –enable-fpm и с другим префиксом установки:

Пример:

./configure
–prefix=/opt/phpfcgi-5.6.0beta3
… (те же опции, кроме –enable-fpm)
–enable-cgi

make make test make install

В результате в /opt/phpfcgi-5.6.0beta3/bin/ появится php-cgi, который можно подключить к Apache через mod_fcgid или аналог.

Важно: при использовании FastCGI в окружении Apache следите за безопасностью прав и владельцев процессов, чтобы не допустить выполнения PHP-кода от имени неподходящих пользователей.

Примеры файлов пула для PHP-FPM

Создайте файл пула, например /opt/php-5.6.0beta3/etc/pool.d/www.conf с примерной конфигурацией:

[www]
user = www-data
group = www-data
listen = 127.0.0.1:8999
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 10
pm.max_requests = 500
catch_workers_output = yes
php_admin_value[upload_max_filesize] = 50M
php_admin_value[post_max_size] = 50M

Настройте значения pm.* в зависимости от доступной памяти и нагрузки.

Отладка и типовые проблемы

  • PHP не запускается: проверьте логи /opt/php-5.6.0beta3/var/log/php-fpm.log и системный лог (/var/log/syslog).
  • Пулов нет: убедитесь, что include=/opt/php-5.6.0beta3/etc/pool.d/.conf указан в php-fpm.conf и что в папке есть .conf.
  • Порт 9000 занят: укажите другой порт (например 8999) или используйте unix-сокет (listen = /var/run/php5.6-fpm.sock) и соответствующим образом настройте веб-сервер.
  • ionCube не загружен: проверьте, что путь в zend_extension указывает на существующий .so-файл, и что он добавлен выше строки [PHP] в php.ini.
  • PECL не находит channel: выполните pecl -C ./pear.conf update-channels из директории /opt/php-5.6.0beta3/etc/.

Общие команды проверки:

  • ps aux | grep php-fpm — проверка, запущен ли процесс php-fpm.
  • /opt/php-5.6.0beta3/sbin/php-fpm -t — проверка конфигурации (если поддерживается собранной версией).
  • /opt/php-5.6.0beta3/bin/php -v — версия PHP и загруженные расширения.

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

  • Не запускайте тестовые или бета-версии на продуктивных системах без полного тестирования.
  • Ограничьте доступ к phpinfo() и не публикуйте его в открытом доступе.
  • Для unix-сокетов используйте безопасные права доступа (группа web и владельцы).
  • Следите за обновлениями безопасности для PHP, ionCube и используемых библиотек.

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

  1. php-fpm успешно запускается: /etc/init.d/php-5.6.0-fpm start завершает работу без ошибок.
  2. phpinfo() показывает версию 5.6.0beta3 и загруженные расширения (OPcache, APCu, ionCube).
  3. В ISPConfig новая версия PHP отображается и доступна для выбора при настройке сайта.
  4. Для выбранных сайтов PHP-скрипты работают корректно под новой версией и не вызывают фатальных ошибок.

Чек-лист администратора перед переводом в продакшн

  • Тестовая среда с идентичной конфигурацией и нагрузкой.
  • Резервные копии конфигурационных файлов и бэкап сайта/БД.
  • Мониторинг памяти и CPU при нагрузочном тесте.
  • Тесты на совместимость кода ваших веб-приложений с PHP 5.6.
  • План отката (какая версия/конфигурация будет восстановлена).

Когда этот метод может не сработать

  • Если у вас старые библиотеки в Wheezy, некоторые опции ./configure могут завершиться ошибкой из-за отсутствующих dev-пакетов.
  • Если используете нестандартные расширения, не поддерживаемые в beta-версии PHP, возможны конфликты или исключения.
  • На минимальных VPS с недостатком памяти сборка и одночасовая работа php-fpm могут приводить к OOM.

Альтернативные подходы

  • Использовать готовые backport-пакеты или репозитории, если доступна релизная версия PHP 5.6 для вашей Debian-версии.
  • Применить контейнеризацию (Docker) — собрать образ с нужной версией PHP и деплоить контейнеры, не изменяя систему хоста.
  • Использовать менеджеры версий PHP (phpbrew) для упрощения сборки и переключения между версиями.

Мини-методология для повторяемой сборки

  1. Подготовить чистую VM/контейнер для сборки со всеми dev-пакетами.
  2. Автоматизировать сборку с помощью скрипта shell/Ansible, включив все ./configure опции и пути.
  3. Тестировать на QA: phpinfo(), unit/integration тесты приложения.
  4. Создать бэкап конфигураций и автоматический план отката.
  5. Документировать используемые версии библиотек и опции сборки.

Риски и смягчение

  • Риск: непредвиденные регрессии в beta-версии PHP. Смягчение: держите тестовую среду и версию fallback в продакшне.

  • Риск: несовместимость расширений PECL. Смягчение: тестировать каждое расширение на отдельной тестовой среде.

Краткая сводка

Сборка PHP 5.6.0beta3 из исходников позволяет гибко настраивать опции, подключать OPcache, APCu и ionCube Loader и регистрировать версию в ISPConfig 3. Внимательно следуйте шагам подготовки зависимостей, корректно указывайте пути и порты для PHP-FPM, тестируйте расширения через PECL и проводите нагрузочное тестирование перед внедрением в продуктив.

Сводка ключевых действий:

  • Установить зависимости и распаковать исходники.
  • Сконфигурировать ./configure с нужными опциями и собрать PHP.
  • Скопировать php.ini и настроить php-fpm.conf (listen и include пулов).
  • Создать init-скрипт и включить в автозагрузку.
  • Установить OPCache, APCu и ionCube, проверить через phpinfo().
  • Зарегистрировать версию в ISPConfig и протестировать сайты.

Спасибо за внимание. Если нужно, могу подготовить готовый скрипт для автоматизации сборки и установки для вашей инфраструктуры.

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

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

Групповые письма с iPhone и iPad
Почта iOS

Групповые письма с iPhone и iPad

Считать шаги на iPhone и Apple Watch
Гид

Считать шаги на iPhone и Apple Watch

Microsoft Defender: обновление не устанавливается — решения
Безопасность Windows

Microsoft Defender: обновление не устанавливается — решения

Организация приложений iPhone и iPad через iTunes
iOS

Организация приложений iPhone и iPad через iTunes

Как совмещать фриланс и полную занятость
Карьера

Как совмещать фриланс и полную занятость

Как скрыть игры и активность в Steam
Приватность

Как скрыть игры и активность в Steam