Все эти работы изначально предполагали большие проблемы и много труда, так как в рамках проекта реализовано большое количество уникального функционала, и он тянется еще с версии языка 5.6. В свое время достаточно просто перешли на версию 7.1. но учитывая особенность версии языка и тех наработок что были, реализовать такой переход оказалось достаточно просто. Если же мы говорим о версии 8+ то тут таится большое количество подводных камней.
Причины перевода. Почему все-таки решились?
Как сказано ранее, клиент не горел большим желанием осуществлять обновление, так как прекрасно понимал, в какие трудности это выльется и какой бюджет на это нужно заложить.
Ситуация в сфере торговли сложилась так - наличие в интернете уже база, а если хочется большего, то надо выходить в маркетплейс. Собственно первой проблемой, которая потребовала решения – это то, что все актуальные модули для интеграции с WildBerries и Ozon в минимальных требованиях указывали PHP-8.1.
Второй причиной стало то, что под весьма нетривиальные задачи по SEO и маркетингу требовался модуль Sotbit: SEO-meta, который так же с новым функционалом стал требовать уже современную версию языка программирования.
И третьей причиной стало требование интегрировать службу доставки СДЭК. И угадайте? Да, новый модуль также требует актуальную версию языка.
И вот, когда все эти трудности стали давить на бизнес с трех сторон, было принято волевое решение все же обновлять виртуальную машину BitrixVM, а сайт переводить на PHP-8.3, который был актуален на тот момент.
План решения задачи
Так как проект старый, и имеет большое количество внутренних решений, интеграций с внешними сервисами, кастомный обмен с 1С, то соответственно мы продумали план того, как будет происходить обновление.
- Создаем пул всех страниц и блоков сайта и оформляем в чек-лист для дальнейшей проверки
- Делаем бэкап сервера для дальнейшего разворачивания его в качестве тестовой среды
- Поднимаем тестовую версию сайта для откатки и подготовки глобального обновления
- Обновляем BitrixVM и MySQL
- Обновляем Битрикс и модули на тестовом сайте, последовательно переключаем на PHP 8.3
- Обновляем ядро и модули Битрикс
- Некоторые партнерские модули придется или отключить или в ручном режиме обновить. Заодно проводим аудит устаревших и неактуальных модулей, которые можно смело удалить.
- Проверяем все файлы проекта на соответствие требованиям языка
- Тестируем каждый блок по чек-листу.
В процессе работ документируем все изменения по проекту, чтобы в дальнейшем корректно перенести на бой, так как придется фактически все работы повторять там почти с нуля, максимум локальные файлы можем перенести с теста.
Рабочий процесс
Вся работа у нас заняла 2 месяца. Нам потребовалось в соответствии с составленным пулом страниц и модулей переработать более 400 файлов. Конечно, не все в ручном режиме мы перебирали, для решения большинства преобразований в соответствии с требованиями версии языка мы использовали ряд инструментов.
Важным подспорьем в миграции с 7 до 8 версии для нас стала официальная документация https://www.php.net/manual/ru/migration80.incompatible.php. Благодаря данной документации мы исправили большой ряд неочевидных проблем.
PHP CS Fixer позволил нам автоматически привести всю структуру кода в соответствие со стандартом PSR-12, а это:
- - убрать короткие теги,
- - преобразовать объявления массивов в короткую форму,
- - а также выявить проблемы в обработке массивов, что чаще всего является причиной ошибок при переводе сайта на новую версию языка.
Другим помощником для нас стала IDE PhpStorm и встроенный анализатор кода, позволивший выявить проблемные файлы, с которыми не справился фиксер. В режиме поддержки версии языка он выявил те файлы, где есть нарушения PHP-8.*. Эти нарушения пришлось исправлять руками и в логе фиксировать все правки, чтобы в дальнейшем при необходимости повторить работы.
Результат
В итоге после подготовки тестовой среды и доведения ее до идеала мы всего-то сделали бэкап файлов тестовой среды и выкатили его на бой. А затем повторили логику обновления сервера, mysql и окружения до состояния тестовой среды. После этого финально протестировали весь проект и отполировали мелкие недочеты. Во время тестирования обнаружили и убрали несколько редко встречаемых багов, которые влияли на конверсию сайта клиента.
Результатом стало то, что клиент получил актуальную среду сайта и возможность дальнейшего спокойного обновления Битрикс, а также новые модули для маркетинга и служб доставки, которые так были востребованы.
