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. Оба сообщения приходят из одного пласта — кода, который не трогали лет десять.