$GLOBALS can only be modified using the $GLOBALS[$name] = $value syntax
Полный текст ошибки:
PHP Fatal error: $GLOBALS can only be modified using the $GLOBALS[$name] = $value syntax
Сайт при этом обычно не открывается вовсе — ни публичная часть, ни административная.
Что произошло
PHP 8.1 запретил присваивать массиву $GLOBALS значение целиком и работать с ним как с обычной переменной. В старых версиях главного модуля такая запись была, поэтому ядро падает сразу при инициализации.
Исправлено в главном модуле версии 22.100.0. То есть проблема не в вашем коде и чинится обновлением продукта.
Порядок действий
- Верните на сервере прежнюю версию PHP — ту, на которой сайт работал. Сайт должен подняться.
- Войдите в административную часть и посмотрите версию главного модуля в списке модулей.
- Обновите ядро и модули до актуальных версий. Если обновлений нет, проверьте срок действия обновлений — возможно, нужно продление лицензии.
- Обновите решения из Маркетплейса.
- Снова переключите PHP на 8.2 или 8.3 и проверьте сайт.
Почему порядок важен
Это тот случай, когда «сначала переключим PHP, потом разберёмся» заводит в тупик: обновления ставятся из административной части, а она на новой версии PHP не открывается. Поэтому обновление продукта всегда идёт первым, а смена версии PHP — вторым шагом.
Частые вопросы
Сайт не открывается совсем, в админку не зайти. Как обновиться?
Сначала верните прежнюю версию PHP на сервере — сайт поднимется. Обновите продукт на ней, потом снова переключайтесь. Пытаться обновиться при лежащем сайте бессмысленно: система обновлений работает из административной части, в которую вы не попадёте.
В какой версии это исправлено?
В главном модуле начиная с версии 22.100.0. Посмотреть текущую версию можно в списке модулей в административной части.
А если версия продукта старше и обновления не оплачены?
Тогда переход на PHP 8 упирается в продление: без действующих обновлений исправление не получить. Придётся либо продлевать, либо оставаться на старой версии PHP — со всеми её уязвимостями.