За последние несколько месяцев к нам часто обращались клиенты, которые пытались самостоятельно обновить боевой портал Битрикс24 (включая Главный модуль и версию PHP).
Проблема заключалась в том, что портал-то обновлялся, вот только на любой странице возникала ошибка, делающая работу в системе практически невозможной.
Текст ошибки выглядел следующим образом:
Fatal error: Declaration of Bitrix\Main\Diag\Logger::log($level, Stringable|string $message, array $context =" []): "void must be compatible with Psr\Log\LoggerInterface::log($level, $message, array $context =" []) "in /home/bitrix/www/bitrix/modules/main/lib/diag/logger.php on line 59
При этом в Интернете советов и информации не так много и все они разнятся:
- отключить модуль PSR (PSR — это набор рекомендаций для PHP-разработчиков)
- внести изменения в файл, находящийся по пути /bitrix/modules/main/lib/web/uri.php
- «откатить» ядро на предыдущую версию (если предварительно был сделан бэкап портала!)
- заменить модуль main версии 23.600.0 (или выше) на версию 23.500.200
Клиент решил не усугублять ситуацию и обратился к нам.
Из-за чего возникает ошибка Fatal error: Declaration of Bitrix?
Ошибка Fatal error: Declaration of Bitrix возникает при обновлении Главного модуля до версии v23.600.0 (от 22 июня 2023) и выше.
Корень ошибки кроется в устаревших библиотеках PSR, используемых на сайте в сторонних модулях или обработчиках. Дело в том, что Битрикс24 по умолчанию использует пакетный менеджер Composer, путь к которому: /bitrix/modules/main/vendor/psr/… (файл composer.json).
Создатели сторонних модулей часто включают аналогичную библиотеку (Composer) в свои сборки!
Устаревшие версии Composer при обновлении Битрикс24 до версии v23.600.0 (и выше) конфликтуют с аналогичными стандартными библиотеками системы.
Собственно, из-за несоответствия версий библиотек и вылезают ошибки.
Решение ошибки Fatal error: Declaration of Bitrix
Для решения ошибки Fatal error: Declaration of Bitrix в Битрикс24 достаточно обновить Composer. Делать это желательно одновременно с обновлением самого портала.
Итак, в нашем случае решение было таким:
- Внесли правки в файл, хранящийся по пусти /local/composer.json, как на скриншоте ниже
- В папке local запустили команду composer update
- В папке local запустили команду composer install --no-dev
Далее зафиксировали изменения на Git командой:
git add --all && git commit -m "composer update" && git push
Результат:
"require":{
"psr/container":"^2.0",
"psr/http-client":"^1.0",
"psr/http-message":"^2.0",
"psr/log":"^3.0",
"php-http/promise":"^1.1",
}
В качестве заключения отметим, что обновлять сразу же боевую версию портала Битрикс24 не следует: проверьте обновление на тестовом контуре; убедитесь, что все доработки и модули работают корректно.