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

Как использовать PHP 4.4.9 (FastCGI) с Apache и ISPConfig 3 на Debian Wheezy

6 min read DevOps Обновлено 27 Nov 2025
PHP 4.4.9 FastCGI с Apache и ISPConfig на Debian
PHP 4.4.9 FastCGI с Apache и ISPConfig на Debian

Краткое описание

PHP-FPM недоступен для PHP4, поэтому мы собираем FastCGI-версию PHP 4.4.9 и настраиваем её для работы с Apache. После установки версия PHP 4.4.9 добавляется в ISPConfig 3 как «дополнительная версия PHP» и становится доступной для выбора в настройках сайтов.

Важно: данная инструкция не даёт гарантии совместимости с вашей системой — тестируйте на отдельном стенде перед продакшеном.

Что потребуется

  • Сервер Debian Wheezy (или совместимый образ).
  • Права root или sudo для установки пакетов и сборки.
  • Интернет для скачивания исходников.
  • Немного свободного места в /usr/local и /opt.

Полезные определения:

  • FastCGI — протокол для передачи запросов веб-серверу от внешнего процесса; в отличие от PHP-FPM для PHP4 используется реализуемый бинарник FastCGI.

1 Предварительная заметка

PHP-FPM не поддерживается для PHP4. FastCGI работает с Apache, но не с nginx в типичной конфигурации для PHP4. Если ваш сайт требует nginx — рассмотрите альтернативы в разделе «Альтернативные подходы».

2 Сборка PHP 4.4.9 (FastCGI)

Ниже показаны команды и правки, которые использую для сборки PHP 4.4.9. Выполняйте их последовательно.

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

apt-get install build-essential

PHP 4.4.9 не компилируется с современными версиями OpenSSL, поэтому сначала устанавливаем старую версию OpenSSL (0.9.8x):

cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config --prefix=/usr/local/openssl-0.9.8
make
make install

Создаём каталоги и скачиваем исходники PHP 4.4.9:

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

Некоторые библиотеки ожидаются в /usr/lib, поэтому создаём символьные ссылки (подстройте под вашу архитектуру и пути):

ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libexpat.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib/libmysqlclient.so
mkdir /usr/kerberos
ln -s /usr/lib/x86_64-linux-gnu /usr/kerberos/lib

Исправление проблем с удалёнными функциями MySQL

Для успешной сборки нужно отключить функции mysql_drop_db и mysql_create_db — иначе появятся ошибки undefined reference.

Откройте файл исходников и закомментируйте обе функции:

vi /usr/local/src/php4-build/php-4.4.9/ext/mysql/php_mysql.c

Перейдите к строке около 1131 и закомментируйте определения функций, как показано ниже:

| [...] /*PHP_FUNCTION(mysql_create_db) { zval db, mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &db)==FAILURE) { RETURN_FALSE; } id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL CREATE DATABASE statement instead."); ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); PHPMY_UNBUFFERED_QUERY_CHECK(); convert_to_string_ex(db); if (mysql_create_db(&mysql->conn, Z_STRVAL_PP(db))==0) { RETURN_TRUE; } else { RETURN_FALSE; } } */ /* }}} */ /* {{{ proto bool mysql_drop_db(string database_name [, int link_identifier]) Drops (delete) a MySQL database */ /*PHP_FUNCTION(mysql_drop_db) { zval db, mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &db)==FAILURE) { RETURN_FALSE; } id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL DROP DATABASE statement instead."); ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); convert_to_string_ex(db); if (mysql_drop_db(&mysql->conn, Z_STRVAL_PP(db))==0) { RETURN_TRUE; } else { RETURN_FALSE; } } */ /* }}} */ [...]

| Обратите внимание: блоки с [...] в примере означают, что показан только фрагмент файла; в вашем файле будут и другие строчки.

Установка зависимостей сборки

Установите зависимости, необходимые для сборки PHP5 — они также покрывают большинство нужд для PHP4:

apt-get build-dep php5

Конфигурация и сборка

Запустите ./configure с набором опций; при необходимости адаптируйте под ваши пути и модули. Если вы измените опции, возможно, потребуются дополнительные библиотеки.

./configure --help

Пример конфигурации, которая работала в моём окружении:

./configure \
--prefix=/opt/phpfcgi-4.4.9 \
--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=/usr \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl=/usr/local/openssl-0.9.8 \
--with-openssl-dir=/usr/local/openssl-0.9.8 \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-expat-dir=/usr \
--enable-fastcgi

Ключевой параметр: --enable-fastcgi — без него FastCGI не включится.

Запустите сборку и установку:

make
make install

Скопируйте рекомендуемый php.ini в установленный каталог:

cp /usr/local/src/php4-build/php-4.4.9/php.ini-recommended /opt/phpfcgi-4.4.9/lib/php.ini

Установка APC (опционально)

APC может ускорить старые приложения PHP4. Скачиваем и устанавливаем APC 3.0.19:

cd /tmp
wget http://pecl.php.net/get/APC-3.0.19.tgz
tar xvfz APC-3.0.19.tgz
cd APC-3.0.19
/opt/phpfcgi-4.4.9/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/opt/phpfcgi-4.4.9/bin/php-config
make
make install

Откройте php.ini и укажите директорию расширений и подключите apc:

vi /opt/phpfcgi-4.4.9/lib/php.ini

Добавьте/отредактируйте:

| [...] extension_dir = "/opt/phpfcgi-4.4.9/lib/php/extensions/no-debug-non-zts-20020429" [...] extension=apc.so apc.enabled=1 apc.shm_segments=1 apc.shm_size=512 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 |

3 Настройка в ISPConfig 3

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

![/files/d4412c47-8d55-4a08-b87e-c8317dfab113.png]

На вкладке «Настройки FastCGI» заполните поля, указывая путь к бинарнику FastCGI (например, /opt/phpfcgi-4.4.9/bin/php) и другие параметры пулов. Вкладку «Настройки PHP-FPM» можно оставить пустой для PHP4.

![/files/64ac378b-a970-455c-9c96-a61d9a50251e.png]

После успешной настройки вы сможете выбрать PHP 4.4.9 для нужного сайта в ISPConfig. Проверьте версию, создав файл с phpinfo():

![/files/145e399b-f241-493d-9251-23656c61c1e1.png]

Пример файла проверки (создайте в корне сайта):

Откройте страницу в браузере и убедитесь, что отображается PHP 4.4.9.

4 Когда это может не подойти

  • Если сайт использует расширения или функции, недоступные в PHP4 (например, современный PDO-адаптер с новыми API), сборка может не помочь.
  • Если система должна соответствовать требованиям безопасности и поддержке — PHP4 давно не получает обновлений; для продакшена лучше мигрировать на поддерживаемые версии.
  • Если вы используете nginx в продакшене, интеграция FastCGI-процесса PHP4 будет сложнее.

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

  • Контейнеризация: поместите старое окружение в Docker-контейнер со старой ОС и PHP4, изолируйте от хоста.
  • Виртуальная машина: выделите VM с Debian Wheezy и запустите там PHP4.
  • Преобразование кода: постепенно портируйте старые сайты на современные версии PHP (лучшее долгосрочное решение).

6 Методология и чеклист перед запуском в продакшен

Мини-методология для безопасного развертывания: подготовка → сборка → тестирование → канареечный выпуск → мониторинг.

Чеклист для администратора (до включения PHP4 для сайта):

  • Выполнен бэкап сайта и базы данных.
  • Сборка прошла без ошибок (make && make install).
  • phpinfo() на тестовом хосте возвращает ожидаемую версию и модули.
  • Настроен отдельный пул FastCGI для сайта (ограничение памяти/процессов).
  • Наличие мониторинга и логов ошибок Apache/PHP.
  • Механизм отката (rollback) протестирован.

Распределение ролей:

  • Системный администратор: сборка, установка OpenSSL, настройка симлинков, конфигурация Apache/ISPConfig.
  • Веб-разработчик: проверка совместимости кода, тестирование функциональности на PHP4.
  • Операции/DevOps: подготовка CI/CD для деплоя, мониторинг и откат.

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

  • phpinfo() возвращает «PHP 4.4.9» и включённые расширения.
  • Все ключевые страницы сайта рендерятся и работают корректно.
  • Отсутствие фатальных ошибок в логах Apache/PHP при нагрузочном тестировании.
  • В метриках — приемлемое время отклика и нагрузка на CPU/память.

8 Отладка и распространённые проблемы

  • Ошибка компиляции, связанная с OpenSSL: убедитесь, что вы указали --with-openssl=/usr/local/openssl-0.9.8 и установлен старый OpenSSL в указанной директории.
  • Ошибки undefined reference для mysql_* — проверьте, что вы закомментировали функции в php_mysql.c.
  • Ошибки отсутствующих библиотек — проверьте симлинки в /usr/lib или установите соответствующие dev-пакеты.
  • Неправильный путь к сокету MySQL — укажите --with-mysql-sock=/var/run/mysqld/mysqld.sock или подстройте под вашу систему.

9 План отката (простая инструкция)

  1. В ISPConfig переключите сайт назад на системную версию PHP или другой безопасный пул.
  2. Перезапустите Apache: service apache2 restart (или systemctl restart apache2).
  3. Удалите/деактивируйте директорию /opt/phpfcgi-4.4.9 или отключите её в ISPConfig.
  4. При необходимости восстановите файлы из бэкапа.

10 Совместимость и советы по миграции

  • PHP4 не поддерживает современные библиотеки и API. Рассматривайте эту инструкцию как временное решение для сохранения старых сайтов.
  • Для долгосрочной поддержки лучше планировать миграцию кода: рефакторинг вызовов mysql_* → PDO/MySQLi, замена устаревших функций и тестирование на PHP7/8 в отдельной ветке.

11 Рекомендации по безопасности

  • Изолируйте старые сайты (ограничьте права файловой системы, используйте отдельные пользователи процессов).
  • Отключите ненужные расширения и ограничьте опции в php.ini (display_errors=Off, логирование ошибок в отдельный файл).
  • По возможности используйте брандмауэр и WAF перед старым приложением.

12 Итог

Вы можете собрать PHP 4.4.9 с поддержкой FastCGI и подключить его к Apache и ISPConfig 3. Это полезно для поддержки исторических сайтов, но ненадёжно для долгосрочного использования из-за устаревшей безопасности и отсутствия поддержки. Планируйте миграцию к современным версиям PHP.

Важные пункты:

  • Всегда тестируйте на отдельной машине.
  • Делайте бэкапы и подготовьте откат.
  • Рассмотрите контейнеризацию или виртуализацию как более изолированные альтернативы.

Автор оригинала: Falko Timme — владелец Timme Hosting и один из разработчиков ISPConfig.

Поделиться: 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 быстро