Бесплатный экспресс-аудит сайта Безопасность, SEO, AI-поиск и 152-ФЗ — отчёт с баллами за минуту Проверить сайт
Обсудить проект

Array and string offset access syntax with curly braces is no longer supported

Текст ошибки:

Fatal error: Array and string offset access syntax with curly braces is no longer supported in /home/site/public_html/bitrix/templates/main/functions.php on line 17

Что произошло

Раньше к символу строки можно было обратиться двумя способами: $string[0] и $string{0}. Второй объявили устаревшим в PHP 7.4 и убрали в 8.0.

Как починить

Заменить фигурные скобки на квадратные:

  • было $string{0} — стало $string[0];
  • было $arr{$i} — стало $arr[$i].

Смысл кода не меняется, поведение то же самое. Это ровно та правка, которую безопасно делать массово по всем своим шаблонам.

Где искать

Такой синтаксис живёт в коде, который давно не трогали:

  • шаблоны сайта в /bitrix/templates/ и /local/templates/;
  • свои компоненты в /local/components/ и /bitrix/components/ с именем вашей компании;
  • вспомогательные файлы в /bitrix/php_interface/.

Если ошибка указывает на файл внутри модуля вендора, значит продукт давно не обновлялся: в актуальных версиях этого синтаксиса нет. Обновите ядро на прежней версии PHP и повторите переход.

Что рядом

Вместе с фигурными скобками в PHP 8.0 убрали функцию each(), а в 7.2 — create_function(). На старом сайте все три встречаются в одних и тех же файлах, так что чинить их удобно за один проход.

Частые вопросы

Как найти все такие места разом?

Поиском по файлам шаблонов и своих компонентов: ищите фигурные скобки сразу после имени переменной. Искать по всему сайту не нужно — в модулях вендора этот синтаксис уже убран.

Такая же ошибка про each(). Это то же самое?

Похожий случай: функция each() удалена в PHP 8.0, её заменяют обычным foreach. Оба сообщения приходят из одного пласта — кода, который не трогали лет десять.