Введение

Переход на актуальные версии PHP (8.0+) для сайтов на 1С-Битрикс — необходимость, но процесс часто сопровождается неожиданными ошибками. Разбираем реальный кейс обновления интернет-магазина с PHP 7.1 → 8.2 и Битрикс до последней версии.

Проблемы, с которыми столкнулись:

  • Несовместимость старых модулей
  • Ошибки в пользовательских доработках
  • Проблемы интеграций (1С, СДЭК, платежные системы)

План по обновлению

  1. Резервные копии:

    • Полный бекап файлов и БД

    • Дампы конфигураций сервера

    • Сохранение .settings.php и dbconn.php

  2. Тестовые среды:

    • Развернули 2 копии сайта (основной + лендинг)

    • Настроили симлинки для общих папок (/upload, /bitrix)

  3. План работ:

    PHP 7.1 → 7.4 → 8.0 → 8.1 → 8.2 Битрикс:
    Постепенное обновление через Marketplace

Ход работ:

При обновлениях Битрикса первый шаг — это создание резервных копий:

Когда резервные копии сделаны, пробуем поднять версию php с 7.1 до 7.4. Существенных отличий между версиями нет, поэтому проблем с работоспособностью не возникло.

В админ панели у нас 2 сайта на одной лицензии.

Разворачиваем для обоих тестовые копии, которые будем обновлять, приведем в рабочее состояние и затем перекинем на них домены, а старые сайты "отключим".

Обновления битрикс на php 7.4

Оба тестовых сайта у нас в рабочем состоянии на версии php 7.4 без проверки интеграций.

Мы проставили симлинки для связи этих сайтов, так как у них одно ядро.

Скорректировали настройки и путей, прав доступа на хостинге к общим папкам.

Провели обновления на тестовой копии:

Запустили допустимые обновления на версии php 7.4.

При обновлении возникала ошибка:

Ошибка устранена. С текущей 7.4 версией все обновления установлены:

Ошибка модуля геолокации, так как настроен Sypex Geo, а адрес сайта другой. Внесли изменения в файл local/php_interface/event_list.php.

Также обнаружены ошибки по классу Rees46.

Класс связан с модулем

Загрузили обновление модуля REES46. Ошибка корзины после обновления исчезла.

Запустили обновление Интернет-магазина и несколько установленных решений:

Обновление модуля интеграции со СДЭК - самое объемное. Версии модулей сильно отличаются, в процессе обновления данного дополнения возникало много ошибок.

Переключение php 7.4 - 8.1

После обновления всех дополнений сделали попытку переключения на версию php 8.1.

Сайт не открывается - ошибки!

Откатили версию php обратно.

Модуль krivovnet.mrocketpopup -  платный, версия устарела. Удаляем его.

Вторая попытка поднятия версии php дает  много сообщений в логе Битрикса. Одно из них - фатальное.

Модуль skyweb24_referralsales -  платный, установлена демо-версия. Удалено.

Также удалили не продленные демо-версии других модулей:

Следующая попытка обновления -  сайт не работает, ошибок еще больше.

Много ошибок выдает модуль доставки ipol.ddelivery

В службах доставки интернет-магазина данная доставка неактивна.

Данный модуль не обнаружен на маркетплейсе битрикса, модуль старый и установлен давно. Удалили.

Следующая попытка переключения битрикс на php8 - сайт не открывается.

Обнаружен модуль embx.orderhistory. В новой версии магазина (от 15.5 и выше) модуль не работает. Удаляем.

Следующая попытка переключения на php8 - три ошибки:

Путем исследования вышли на пользовательские функции, постепенно устраняя ошибку за ошибкой.

После устранения обнаруженных ошибок, страница обновления платформы битрикс открылась на 8.1 версии.

Появилась возможность установки остальных обновлений начиная с 8 версии.

Некоторые страницы админки битрикса по прежнему не открываются.

Открылась страница списка решений, но у некоторых решений нет описания и каких либо данных:

! В логах ошибки.

project::InitProject

CBitrixXscan::OnBuildGlobalMenu

устранена позже (из за встроенного модуля qs_divisory)

! Ошибка при добавлении в корзину

.../ajax/cart.php:6

call_user_func_array(): Argument #1 ($callback) must be a valid callback, class Rees46\Events does not have a method "OnSaleBasketItemBeforeSavedMy"

устранена позже

Страницы редактирования инфоблоков - открываются.

! Страница списка заказов открывается, а редактирование отдельного заказа - нет.

После корректировки статичности классов:

Принято решение провести доступные обновления ядра:

Среди обновлений модуль qs_divisory значительно расширяет стандартный функционал 1C-Bitrix. Удалили.

! ошибка при оформлении заказа

Добавление, удаление, изменение количества в корзине - не работает.

Поиск метода в классах и файлах не дал результатов.

Причина найдена в привязанном событии (среди связей модулей в БД).

Убрали, очистили кеш, через некоторое время заработали функции корзины.

Установили новые обновления битрикс и модулей:

Получили ошибку при открытии сайта из инкогнито.

Исправили.

При тестировании обнаружена ошибка при изменении количества в корзине:

Пошагово отлавливали и устраняли ошибки.

Правки в модулях.

Изменили значения некоторых констант.

Правки в агентах.

Правки  в init.

Правки в шаблонах.

Обновление на php 8.2

Поменяли версию php на 8.2. На версии php 8.2 также были проблемы, выдавало ошибку:

Проблема в настройках работы кеширования memcached

[Bitrix\Main\NotSupportedException] memcache extension is not loaded. (150)

Исправили.

Также обнаружена проблема


Оценка результатов работы

При обновлении версии php до 8 и установке актуальных обновлений битрикс кроме указанных выше были решены проблемы синхронизации с Мой склад и сервисом отправки смс.

Общая сложность работ по обновлению битрикс и поднятию php до 8.2 составила более 70 часов. 

Статистика по времени:

Этап Часы
Обновление Битрикс 35
Исправление ошибок PHP 8.x 28
Тестирование интеграций 12
Итого 75+

Еще одним этапом работ было восстановление работоспособности второго сайта на этой же админке битрикс.  Не смотря на то, что второй сайт - простой лендинг, на его восстановление так же было потрачено более 6 часов.

После тестирования и отладки сайты были запущены в боевом режиме, внесены финальные правки по интеграциям.

В дальнейшем по сайту был выполнен еще ряд доработок, связанных с платежными системами - добавление новых способов оплаты по QR и СБП с сохранением печати чеков.

Решенные задачи:

  • Ускорение работы сайта на 27% (тест через WebPageTest)
  • Исправление интеграций:
    • Синхронизация с "МойСклад"
    • Отправка SMS через новый API
  • Добавление СБП и QR-платежей

Выводы

  1. Подготовка — ключевой этап (бекапы, тестовая среда).
  2. Постепенность — переходите между версиями PHP последовательно.
  3. Модули — 80% ошибок связаны с устаревшими решениями.

Нужна помощь с обновлением?

Пожалуйста, подтвердите, что вы не робот, ниже.
Спасибо за заявку!Наш менеджер свяжется с Вами в ближайшее время!
Я принимаю условия Политика в отношении обработки персональных данных и даю .
Наш сайт использует сервис веб-аналитики Яндекс Метрика и технологию “cookie”. Продолжая пользоваться сайтом, вы соглашаетесь с использованием , и принимаете нашу Политику в отношении обработки персональных данных.