Как использовать PHP 4.4.9 (FastCGI) с Apache и ISPConfig 3 на Debian Wheezy
Краткое описание
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-essentialPHP 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.bz2cd 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 План отката (простая инструкция)
- В ISPConfig переключите сайт назад на системную версию PHP или другой безопасный пул.
- Перезапустите Apache:
service apache2 restart(илиsystemctl restart apache2). - Удалите/деактивируйте директорию /opt/phpfcgi-4.4.9 или отключите её в ISPConfig.
- При необходимости восстановите файлы из бэкапа.
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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента