собственным оформлением и набором функций, которые были реализованы ещё на старой версии phpBB.Задача заключалась не просто в обновлении CMS, а в полноценной миграции legacy-проекта:
перевести форум с phpBB 3.0.8 на phpBB 3.3.17, сохранить данные,
привычный интерфейс и основные функции, адаптировать сайт к современному PHP
и одновременно решить проблемы с производительностью и высокой нагрузкой на хостинг.
Исходная ситуация
Форум много лет работал на phpBB 3.0.8. За это время стандартная система была значительно
изменена: использовался старый стиль на базе subsilver2, собственные MOD’ы,
система благодарностей и репутации, быстрый ответ, дополнительные элементы навигации,
портал и другие доработки.
Простое обновление phpBB в такой ситуации было невозможно. Большинство старых MOD’ов
несовместимы с phpBB 3.3, а современная архитектура движка значительно отличается от phpBB 3.0.
- phpBB 3.0.8;
- устаревший шаблон на базе subsilver2;
- большое количество legacy-кода и MOD’ов;
- многолетняя база пользователей, тем и сообщений;
- система благодарностей и рейтинга;
- кастомный быстрый ответ;
- нестандартная навигация;
- старые смайлики и элементы интерфейса;
- необходимость работы на современной версии PHP;
- высокая нагрузка от поисковых роботов и scraper-ботов.
Основная задача
Обновить техническую платформу форума, но при этом не превратить его в стандартный
phpBB с совершенно новым интерфейсом.
Необходимо было сохранить:
- пользователей;
- форумы и подфорумы;
- темы;
- сообщения;
- привычный внешний вид;
- быстрый ответ;
- систему благодарностей и рейтинга;
- старые смайлики;
- логику перехода к непрочитанным сообщениям;
- основные пользовательские сценарии старого форума.
1. Создание тестовой площадки и обновление phpBB
Обновление сначала выполнялось на отдельном тестовом домене. Это позволило работать
с копией форума и не проводить рискованные эксперименты непосредственно на основном сайте.
На тестовой площадке были выполнены:
- перенос файлов и базы данных;
- обновление phpBB до версии 3.3.17;
- проверка структуры базы;
- проверка пользователей и авторизации;
- проверка форумов, тем и сообщений;
- проверка вложений;
- проверка прав доступа;
- адаптация старого функционала;
- устранение ошибок совместимости с современным PHP.
Только после проверки тестовой версии обновлённый форум был перенесён на боевой домен
mulke.net.
2. Сохранение старого дизайна форума
Одним из главных требований было максимально сохранить интерфейс, к которому привыкли
постоянные пользователи.
Для этого был создан отдельный legacy-стиль и набор собственных расширений,
адаптирующих современный phpBB под старое оформление Mulke.net.
Восстанавливались и дорабатывались:
- цветовая схема;
- табличное представление форумов;
- шапка сайта;
- структура страниц;
- кнопки управления сообщениями;
- пагинация;
- оформление профилей;
- ширина и расположение колонок;
- блоки тем и сообщений;
- элементы старого интерфейса.
Отдельно было исправлено вертикальное выравнивание названий тем и колонок
«Ответов», «Просмотров» и «Последнее сообщение».
3. Восстановление быстрого ответа
Стандартный быстрый ответ phpBB существенно отличался от формы, которую пользователи
видели на старом форуме.
Поэтому форма была расширена и адаптирована.
В ней были восстановлены:
- поле заголовка;
- BBCode-панель;
- жирный и курсивный текст;
- Quote;
- Code;
- List;
- Img;
- URL;
- выбор размера шрифта;
- выбор цвета текста;
- старые смайлики Mulke.net;
- Emoji;
- применение форматирования к выделенному тексту.
Для этого создавались отдельные шаблоны, CSS, JavaScript и собственные расширения phpBB.
4. Старые смайлики и Emoji
Старые смайлики являлись частью визуальной культуры форума, поэтому при миграции
их было важно не потерять.

Был восстановлен старый набор смайликов Mulke.net и добавлена возможность работать
с современными Emoji.
В результате пользователи получили привычный набор смайликов внутри нового phpBB.
5. Благодарности, рейтинг и реакции
В старом форуме активно использовалась система благодарностей и репутации.
После перехода на новую версию phpBB эту механику необходимо было восстановить
с помощью современных расширений и дополнительных доработок.
Были реализованы и адаптированы:
- благодарность за сообщение;
- рейтинг сообщений;
- репутация пользователей;
- реакции;
- визуальные индикаторы под сообщениями;
- звёздочки и другие элементы старой системы оценок.
При этом была сохранена логика форума и привычное отображение оценок.
6. Переход к первому непрочитанному сообщению
Была изменена стандартная логика переходов по темам.
Теперь при клике на название темы:
- если есть новые сообщения — открывается первое непрочитанное;
- если все сообщения прочитаны — открывается последнее сообщение темы.
Причём эта логика была реализована не только в разделе непрочитанных сообщений,
а во всех основных списках тем.
7. Блок последних активных тем
Для главной страницы было разработано отдельное расширение
Mulke Recent Topics.
Блок показывает:
- название темы;
- автора;
- дату;
- раздел форума;
- количество ответов;
- просмотры;
- автора и дату последнего сообщения;
- страницы длинных тем.
Внешнее оформление блока было приведено к общему стилю форума.
Чтобы блок не создавал лишнюю нагрузку при каждом открытии главной страницы,
данные кэшируются.
8. Исправление проблем с кодировкой
При переносе старого форума возникали типичные для legacy-проектов проблемы
с кодировкой и обработкой старых данных.
Проводилась проверка:
- таблиц базы данных;
- кодировок MySQL;
- новых сообщений;
- старых сообщений;
- поиска;
- фильтров цензуры;
- русского языка интерфейса.
В частности, была устранена проблема, при которой вместо текста в новых сообщениях
могли появляться символы ???.
9. Русский язык интерфейса
После обновления часть пользователей продолжала видеть английский интерфейс,
несмотря на изменение языка в административной панели.
Были проверены языковые пакеты, настройки пользователей и язык по умолчанию,
после чего русская локализация была восстановлена.
10. Исправление авторизации после переноса на mulke.net
После переноса готовой тестовой версии на боевой домен появилась ошибка:
«Ошибка отправки формы. Попробуйте ещё раз.»
Ошибка проявлялась при попытке авторизации.
В процессе диагностики проверялись:
- cookies;
- домен cookie;
- SID;
- PHP-сессии;
- настройки phpBB;
- кэш;
- настройки домена;
- формы авторизации.
После корректировки конфигурации работа авторизации была восстановлена.
11. Совместимость старых MOD’ов с PHP 8
Значительная часть старого кода форума создавалась для PHP 5 и ранних версий phpBB.
После перехода на современную платформу проявились ошибки:
- статические вызовы нестатических методов;
- устаревший CAPTCHA-код;
- старые вызовы phpBB API;
- несовместимый код портала;
- старые UTF-функции;
- устаревшие PHP-конструкции.
Проблемные компоненты постепенно адаптировались, заменялись либо изолировались
от основной системы.
12. Исправление Twig-шаблонов
Современный phpBB использует Twig, поэтому старый подход к шаблонам невозможно было
перенести напрямую.
Часть интерфейса была перенесена через механизм template events.
В процессе работы диагностировались ошибки вида:
Twig\Error\LoaderError:
Unable to find template
"@mulke_legacyui/event/overall_footer_breadcrumb_append.html"
Для устранения подобных ошибок создавались совместимые шаблоны,
корректировалась структура расширений и очищался Twig-кэш.
13. Анализ базы данных и медленных запросов
После запуска обновлённого форума отдельной задачей стала производительность.
Были проанализированы MySQL slow query log и основные таблицы phpBB.
Проверялись:
- phpbb_sessions;
- phpbb_topics;
- операции обновления счётчиков;
- создание гостевых сессий;
- cron-задачи;
- структура и движки таблиц;
- возможность перевода старых таблиц на InnoDB.
Для диагностики создавались отдельные служебные инструменты и профилировщики.
14. Диагностика высокой нагрузки на хостинг
После обновления на хостинге Jino наблюдался высокий расход CPU.

Для поиска причины анализировались:
- access.log;
- error.log;
- slow query log;
- PHP-процессы;
- cron-задачи phpBB;
- поисковые роботы;
- scraper-боты;
- динамические URL форума.
15. Обнаружение распределённого scraper-бота
В логах был обнаружен бот, который работал с большого количества IP-адресов
и массово обращался к динамическим страницам phpBB.
Характерный User-Agent:
Mozilla/5.0 (X11; Linux aarch64)
AppleWebKit/537.36
(KHTML, like Gecko)
Chrome/139.0.0.0 Safari/537.36
Бот активно открывал:
/viewtopic.php;/posting.php?mode=quote;/ucp.php;- страницы авторизации;
- старые сообщения форума.
Блокировка отдельных IP не имела смысла, потому что адреса постоянно менялись.
Поэтому была реализована фильтрация по комбинации характеристик User-Agent
непосредственно через Apache .htaccess.
После установки правила запросы стали отсеиваться с кодом
403 Forbidden до запуска phpBB.
16. Защита от AI-ботов и технических crawler’ов
Дополнительно анализировалась активность различных поисковых и AI-роботов.
В том числе:
- GPTBot;
- ClaudeBot;
- Claude-SearchBot;
- DotBot;
- GoogleOther;
- Baiduspider;
- 360Spider;
- Bingbot;
- YandexBot.
Нежелательные роботы были ограничены через .htaccess и
robots.txt.
17. Оптимизация robots.txt
Одной из причин лишней нагрузки являлось большое количество технических URL,
которые поисковые системы продолжали обходить.
Был закрыт обход служебных страниц:
/posting.php;/search.php;/ucp.php;/memberlist.php;/cron.php;/mcp.php;/report.php;/go.php;- служебных разделов
app.php; - системных каталогов phpBB.
Также закрывались типичные URL-дубли:
sid=;view=print;view=next;view=previous;hilit=.
При этом основные индексируемые страницы форума остались открыты:
/index.php;/viewforum.php;/viewtopic.php.
18. Оптимизация обхода Яндексом
Анализ access.log показал, что YandexBot иногда за несколько секунд загружал большое
количество динамических страниц форума.
Особенно активно обходились:
- отдельные сообщения;
- старые страницы больших тем;
view=next;view=previous;- URL с параметрами поиска и подсветки.
Для Яндекса была создана отдельная секция robots.txt с ограничением технических URL
и более аккуратным режимом обхода.
При этом основной контент форума оставался доступным для индексации.
19. Кэширование статических файлов
Для снижения повторной нагрузки на сервер было настроено браузерное кэширование
статических ресурсов.
Кэшируются:
- CSS;
- JavaScript;
- GIF;
- PNG;
- JPEG;
- WebP;
- SVG;
- favicon;
- WOFF и WOFF2.
HTML и динамические PHP-страницы подобным способом не кэшируются,
чтобы не нарушать работу авторизации и персонального интерфейса форума.
20. Дополнительные доработки
Помимо основной миграции, во время проекта выполнялось множество небольших,
но важных доработок.
- выравнивание таблиц форумов;
- изменение ширины колонок;
- восстановление старых кнопок;
- исправление пагинации;
- доработка ссылок тем;
- кнопка «Наверх»;
- быстрые цитаты;
- цитирование выделенного текста;
- адаптация профилей пользователей;
- восстановление элементов репутации;
- доработка списка непрочитанных сообщений;
- восстановление элементов старого форума;
- сохранение памятного блока, посвящённого основателю форума.
Собственные расширения и технические инструменты
В процессе проекта было создано и доработано несколько собственных компонентов phpBB.
Среди них:
- Mulke Legacy UI;
- Mulke Recent Topics;
- модули быстрого ответа;
- модули старых смайликов и Emoji;
- расширения для репутации и рейтинга;
- быстрое цитирование;
- навигация по непрочитанным сообщениям;
- профилировщик нагрузки;
- инструменты диагностики MySQL;
- performance-hotfix’ы;
- crawler-shield для защиты от ботов.
Результат проекта
В результате старый форум был перенесён с phpBB 3.0.8 на современную
phpBB 3.3.17.
При этом удалось сохранить:
- многолетнюю базу пользователей;
- форумы и темы;
- сообщения;
- привычное оформление;
- старые смайлики;
- расширенный быстрый ответ;
- благодарности;
- рейтинг и репутацию;
- привычную навигацию по темам.
Одновременно проект получил современную техническую основу, совместимую с актуальной
версией PHP и новой архитектурой phpBB.
Дополнительно была проведена оптимизация базы и серверной части,
настроено кэширование, выполнен анализ нагрузки и создана многоуровневая защита
от агрессивных crawler’ов и scraper-ботов.
Почему этот проект был сложнее обычного обновления CMS
В данном случае недостаточно было установить новую версию phpBB.
Фактически выполнялась реконструкция legacy-системы, где необходимо было одновременно:
- сохранить многолетние данные;
- перенести старую пользовательскую логику;
- переписать несовместимые MOD’ы;
- воспроизвести старый дизайн;
- адаптировать код к современному PHP;
- разработать собственные расширения;
- исправить ошибки после миграции;
- оптимизировать MySQL;
- диагностировать серверную нагрузку;
- защитить сайт от распределённого бот-трафика.
Поэтому проект объединил сразу несколько направлений:
backend-разработку, frontend, работу с MySQL, DevOps,
анализ логов, оптимизацию производительности и legacy-разработку.
Использованные технологии
| CMS / форум | phpBB 3.3.17 |
|---|---|
| Исходная версия | phpBB 3.0.8 |
| Backend | PHP |
| Шаблонизатор | Twig |
| База данных | MySQL / MariaDB |
| Frontend | HTML, CSS, JavaScript |
| Web-сервер | Apache, .htaccess |
| Хостинг | Jino |
| Диагностика | access.log, error.log, MySQL slow query log |
| SEO / Crawling | robots.txt, crawler filtering, URL duplicate control |
Итог
Проект Mulke.net — пример того, как можно обновить технически устаревший сайт,
не уничтожая накопленную за годы пользовательскую среду.
Вместо полной замены форума была выполнена аккуратная миграция:
старые данные и привычный интерфейс сохранены, а техническая часть перенесена
на современную версию phpBB.
После запуска работа продолжилась уже как комплексная модернизация:
разработка расширений, восстановление legacy-функций, оптимизация базы,
анализ нагрузки и защита от автоматизированного трафика.
Нужно обновить старый сайт или форум?
Работаю с legacy-проектами, которые нельзя просто удалить и установить заново:
старые CMS, форумы, базы данных, нестандартные модули и многолетние пользовательские данные.
Могу провести аудит проекта, разработать безопасный план миграции,
перенести функционал и поэтапно обновить систему без потери важных данных.
