У меня на поддержке есть несколько форумов phpBB. Пришла пора обновить форум с версии 3.3.0 на версию 3.3.8. Текущий форум работает на IIS. PHP версии 7.3.7. В phpBB 3.3.8 есть поддержка PHP 8.0. Так что вместе с форумом придётся обновить PHP. Кроме того, в новой версии форума обновим расширения.
Подготовительные работы
PHP
Сперва установим PHP 8.0 на IIS. Установим также PHP Manager for IIS, чтобы в любой момент переключить версию PHP. Про установку PHP на IIS написал здесь:
Устанавливаем. Обновлять форум я буду на PHP 7, а уже после обновления переключусь на PHP 8. Обновлять саму базу форума будем через командную строку, поэтому, пока оставим приоритет для PHP 7 в серверных переменных.
Расширения
Подготовим имеющиеся расширения к переходу на новую версию. В первую очередь — обновите все свои расширения до последней версии. Ссылка "Перепроверить все версии" поможет.
Да, обновлять нужно много чего. Глаза боятся, а руки делают.
Увлёкся и обновил свои собственные расширения, встроил в них проверку версий.
Расширение Announcement Topics для phpBB 3.3 (v1.0.4)
Расширение Yandex Metrika для phpBB 3.3 (v1.0.4)
Отключаю все расширения.
Обновление на phpBB 3.3.8
Инструкция по установке:
https://www.phpbb.com/support/docs/en/3.3/ug/upgradeguide/minor/
Я предпочитаю выполнять полное обновление. Скачиваем дистрибутив phpBB 3.3.8:
https://www.phpbb.com/downloads/
Распаковываем в отдельную директорию.
В настройки конференции и меняем язык на British English.
Персонализация → языковые пакеты.
Удаляем все пакеты кроме British English.
В настройках конференции устанавливаем стиль prosilver.
Персонализация → стили.
Деактивируем остальные стили.
Мой стиль — prosilver Special Edition, мной специально отредактирован. Удалю его, потом новый сделаю, это уже отдельная история, которая здесь не рассматривается.
Удаляю свой старый стиль.
Теперь у форума один стиль — prosilver.
В распакованном нами новом дистрибутиве удаляем:
- files
- images
- store
- config.php
- web.config
Останавливаем сайт в IIS. Перезапускаем IIS:
iisreset
Иногда IIS зажимает некоторые файлы и их не удаётся удалить, перезапуск помогает.
Удаляем на сайте всё кроме:
- ext
- files
- images
- store
- config.php
- web.config
- и ваши собственные файлы, не относящиеся к форуму
Копируем с заменой всё из распакованной папки дистрибутива на сайт.
Дожидаемся окончания копирования.
Пришло время обновить базу. Запускаем командную строку от администратора. Переходим в папку сайта:
cd C:\ваш_сайт
Выполняем:
php ./bin/phpbbcli.php db:migrate --safe-mode
Получается нечто такое:
Видим [OK] The database update was successful.
В IIS запускаем сайт.
Из папки сайта удаляем директорию install.
Заходим по ссылке:
https://www.phpbb.com/languages/
И качаем перевод форума для версии 3.3.8. Я скачиваю russian_2_1_10.zip. Распаковываем.
Копируем содержимое в корень сайта.
Проверяем работу сайта.
Сайт заработал. Заходим в админку.
Версия PHP 7.3.7, версия форума 3.3.8. Обновление прошло успешно.
Останавливаю сайт и меняю версию PHP на 8.0. Запускаю сайт.
Всё работает.
Приводим всё в порядок
Теперь нужно вернуть все настройки на прежние. Русскую локализацию мы уже скачали, включим. Переходим в Customize → Language packs.
Устанавливаем русский язык — Install.
В Board settings устанавливаем Default language — Русский.
Снова возвращаемся в Customize → Language pack, удаляем British English.
После удаления все пользователи начинают использовать русский язык, интерфейс админки теперь снова на русском.
Теперь можно снова установить British English, пусть будет.
У нас два языка, русский — основной.
На самом деле вы устанавливайте языковые пакеты те, которые нужны именно вашему форуму.
Включаем расширения обратно.
Снова создаю свой стиль для форума. Процесс кропотливый.
Работа над ошибками
Без проблем, как обычно, не обошлось.
При переходе на PHP 8.0 в расширении Breadcrumb Menu появилась ошибка:
[04-Nov-2022 18:18:58 Europe/Moscow] PHP Warning: Trying to access array offset on value of type bool in [ROOT]\ext\paybas\breadcrumbmenu\event\listener.php on line 286
Лечение:
phpBB 3.3.8 — Breadcrumb Menu ошибка PHP: Trying to access array offset on value of type bool
Других критичных проблем пока не замечено.