Обновление PHP для 1С-Битрикс: технические нюансы, критические ошибки и методы их устранения
Перевод крупных веб-ресурсов и интернет-магазинов на актуальные версии PHP 8.1, 8.2 и 8.3 —
важный шаг для поддержания скорости, безопасности и совместимости проекта. Платформа
«1С-Битрикс» постепенно адаптирует ядро под новые версии PHP, но на реальных сайтах
обновление серверного окружения часто приводит к критическим сбоям, ошибкам
Fatal Error и «белому экрану смерти».
В этом техническом руководстве разберём типовые ошибки, которые появляются в модулях, шаблонах и кастомных компонентах после перехода на PHP 8.x, а также покажем способы их локализации и исправления.
1. Критические ошибки после перехода на PHP 8.x
В PHP 8.0 и более новых версиях многие ситуации, которые раньше вызывали только
предупреждения Warning или замечания Notice, теперь приводят
к фатальной остановке скрипта. Именно поэтому старый код, который годами работал на
PHP 7.4, может полностью сломать сайт после переключения версии PHP.
Ошибка 1: неверный тип данных при работе с массивами
В старых компонентах и кастомных модулях часто встречается код, где в функции передаётся
переменная неподходящего типа. Например, вместо массива в count() может
попасть false, null или строка.
$elementId = false;
$count = count($elementId);
В PHP 7.4 такой код мог вернуть предупреждение. В PHP 8.x он уже приведёт к фатальной ошибке.
Текст ошибки:
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, bool given
Решение: перед вызовом функции нужно проверять тип данных.
if (is_array($elementId) || $elementId instanceof Countable) {
$count = count($elementId);
} else {
$count = 0;
}
Ошибка 2: обращение к строке как к массиву
Ещё одна частая проблема в старом коде — переменная сначала создаётся как строка, а затем используется как массив. На старых версиях PHP это могло долго оставаться незамеченным, но в PHP 8.x такой код падает с ошибкой.
$arResult = "";
$arResult["ITEMS"][] = $item;
Текст ошибки:
Fatal error: Uncaught TypeError: Cannot access offset of type string on string
Решение: массивы нужно инициализировать явно.
$arResult = [];
$arResult["ITEMS"][] = $item;
Ошибка 3: использование устаревших функций
После перехода на PHP 8.x могут перестать работать старые функции, которые ранее
использовались в кастомных обработчиках, шаблонах или модулях. Например, функция
each() была удалена, а передача null в некоторые строковые
функции теперь вызывает предупреждения или ошибки.
Пример ошибки:
Fatal error: Uncaught Error: Call to undefined function each()
Также часто встречаются проблемы с функциями preg_match(),
htmlspecialchars(), trim() и другими, если в них передаётся
null вместо строки.
$value = null;
$result = htmlspecialchars($value);
Более безопасный вариант:
$value = $value ?? '';
$result = htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
2. Таблица соответствия версий PHP и требований к серверу
Перед переключением версии PHP в панели хостинга или BitrixVM нужно проверить, совместима ли текущая версия ядра Битрикс, установленные модули и кастомный код с новой версией интерпретатора.
| Версия PHP | Минимальная версия Битрикс | Рекомендуемые параметры php.ini |
|---|---|---|
| PHP 7.4 | Старые проекты и версии до 21.x | mbstring.func_overload = 0 |
| PHP 8.1 | Битрикс 22.0.0+ | memory_limit = 512M, max_input_vars = 10000 |
| PHP 8.2 / 8.3 | Битрикс 23.x / 24.x+ | opcache.revalidate_freq = 0, память от 512M до 1G |
Важное примечание по архитектуре:
если на сайте есть прямые правки в папке /bitrix/modules/, обновление ядра
может затереть кастомную логику. Такие доработки лучше переносить в /local/,
обработчики событий и собственные модули.
3. Чек-лист безопасного обновления PHP на Битрикс
- Создать staging-копию сайта. Не стоит переключать PHP сразу на рабочем сервере. Сначала сайт копируется на тестовое окружение.
- Проверить ядро и модули. Перед обновлением PHP нужно обновить ядро Битрикс и модули Маркетплейса до актуальных версий на текущей рабочей версии PHP.
-
Провести аудит кастомного кода.
Особое внимание нужно уделить папкам
/local/, кастомным компонентам, шаблонам, обработчикам событий и старым интеграциям. - Переключить PHP на тестовом окружении. После переключения проверяются страницы сайта, административная панель, корзина, оформление заказа, формы и личный кабинет.
-
Изучить логи ошибок.
Основные проблемы обычно видны в
error.log, логах Apache/Nginx и журналах PHP. - Проверить интеграции. Нужно убедиться, что корректно работают обмен с 1С, платёжные системы, службы доставки, CRM, почтовые события и API-интеграции.
4. Профессиональное устранение ошибок и доработка кода
Исправление архитектурных ошибок и адаптация кастомных скриптов под современные версии PHP требует понимания Bitrix Framework API, структуры компонентов, событийной модели и особенностей серверного окружения.
Если после обновления PHP сайт перестал открываться, показывает пустую страницу,
выдаёт Fatal error или начал нестабильно работать, лучше не исправлять ошибки
вслепую на рабочем сервере. Сначала нужно определить источник проблемы, проверить логи
и безопасно внести изменения в код.
Вы можете передать такие задачи специалистам AG Studio. Подробнее о направлении можно прочитать
на странице
Доработка сайтов на Bitrix и PHP.
Мы помогаем находить несовместимый код, исправлять ошибки после обновления PHP,
переносить старую логику в /local/ и стабилизировать работу сайта.
Если требуется комплексная проверка проекта перед обновлением, подойдёт услуга аудита производительности и скорости сайта. В рамках аудита можно заранее выявить слабые места, которые могут привести к ошибкам после перехода на PHP 8.x.
Подробнее о подходе к разработке и опыте студии можно узнать на странице О студии AG Studio, а примеры реализованных проектов — в разделе Примеры работ.
Для консультации по обновлению PHP, исправлению ошибок Битрикс или восстановлению сайта после неудачного апгрейда можно связаться через страницу Контакты AG Studio.