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

$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. То есть проблема не в вашем коде и чинится обновлением продукта.

Порядок действий

  1. Верните на сервере прежнюю версию PHP — ту, на которой сайт работал. Сайт должен подняться.
  2. Войдите в административную часть и посмотрите версию главного модуля в списке модулей.
  3. Обновите ядро и модули до актуальных версий. Если обновлений нет, проверьте срок действия обновлений — возможно, нужно продление лицензии.
  4. Обновите решения из Маркетплейса.
  5. Снова переключите PHP на 8.2 или 8.3 и проверьте сайт.

Почему порядок важен

Это тот случай, когда «сначала переключим PHP, потом разберёмся» заводит в тупик: обновления ставятся из административной части, а она на новой версии PHP не открывается. Поэтому обновление продукта всегда идёт первым, а смена версии PHP — вторым шагом.

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

Сайт не открывается совсем, в админку не зайти. Как обновиться?

Сначала верните прежнюю версию PHP на сервере — сайт поднимется. Обновите продукт на ней, потом снова переключайтесь. Пытаться обновиться при лежащем сайте бессмысленно: система обновлений работает из административной части, в которую вы не попадёте.

В какой версии это исправлено?

В главном модуле начиная с версии 22.100.0. Посмотреть текущую версию можно в списке модулей в административной части.

А если версия продукта старше и обновления не оплачены?

Тогда переход на PHP 8 упирается в продление: без действующих обновлений исправление не получить. Придётся либо продлевать, либо оставаться на старой версии PHP — со всеми её уязвимостями.