Заказчик пришел к нам на техническую поддержку сайта — оптово-розничный магазин, который был в рабочем состоянии, но не обновлялся несколько лет.
В основе функционала — решения (модули), которые не поддерживаются их разработчиками около пяти лет.
Эти устаревшие решения необходимы для функционирования магазина, но они же работают на старой седьмой версии php, а старая версия блокирует обновления Битрикса, что в свою очередь влияет на безопасность — получается замкнутый круг.
Доработать решения под требования 8 версии php вроде бы самое очевидное решение, но весь магазин и его функционал завязан на этих решениях, сразу сыпятся десятки ошибок.
В таких случаях обычно принимается решение делать новую версию сайта с нуля, чтобы не плодить костыли и не тратить зря время разработки на переписывание чужих модулей.
Но возникает две проблемы:
Переделывать с нуля довольно дорого, а ситуация здесь и сейчас в глазах клиента не требует срочного вливания денег, так как сайт формально работает (хоть и доработки вносить проблематично).
Нет исходного ТЗ, по которому делался сайт. Есть разные части задач, которые удалось скомпилировать в один файл, но в полноценное ТЗ это не складывается. Часть функционала, который есть, заказчик не знает или не помнит достаточно подробно. Но его необходимо сохранить.
Поэтому было принято решение вернуться к варианту с последовательным планомерным устранением ошибок после переключения на php8 на отдельной тестовой площадке.
И так, приступаем. Меняем версию php на 8.1 и обновляем Битрикс.
Покажу пару ошибок, которые встречаются в основном модуле.
in_array (): Argument #2 ($haystack) must be of type array, null given (0)
Добавляем проверку.
Пример типичных ошибок нестатических методов вызывающие статически.
call_user_func_array (): Argument #1 ($callback) must be a valid callback, non-static method IndiMainNotify: OrdersSentEmailNew () cannot be called statically (0)
public function OrdersSentEmailNew (BitrixMainEvent $event)
Добавляем static.
public static function OrdersSentEmailNew (BitrixMainEvent $event)
Классов и методов достаточно много, так что за работу. Ищем и исправляем.
В шаблонах ошибки так же типичны. Вывод данных без проверки и тому подобного.
В результате удалось за месяц победить все ошибки, оттестировать сайт и перенести на прод актуальную копию на последних версиях php и битрикса.
И по срокам, и по бюджету для клиента вопрос решился выгоднее, чем если бы ему настоятельно предлагали переделывать сайт с нуля ввиду того, что все устарело.