Ошибка в конфликте библиотек PSR c composer при обновлении 1С-Битрикс до 23.650.100
По умолчанию Битрикс использует библиотеки composer, которые находятся в папке /bitrix/modules/main/vendor/psr/. При использовании composer разработчиками, устаревшие версии его библиотек могут конфликтовать с аналогичными библиотеками в Битрикс, учитывая, что они были недавно обновлены до 23.650.100 или выше.
После установки последних обновлений платформы 1С-Битрикс до 23.650.100 в одном из проектов, созданных на платформе 1С-Битрикс24 Корпоративный портал и на готовом решении Аспро: Максимум из Маркетплейс стала выходить ошибка:
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
[ErrorException] E_COMPILE_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 = []) (0)
/home/bitrix/www/bitrix/modules/main/lib/diag/logger.php:59
Подобная проблема заключается в устаревших библиотеках psr, используемых на сайте в сторонних модулях или обработчиках.
Как выявить кастомизацию на сайте: dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=12223&LESSON_PATH=3906.4493.12223
По умолчанию Битрикс использует composer с библиотеками psr, которые находятся в папке /bitrix/modules/main/vendor/psr/.
Однако, создатели сторонних модулей могут включать такие библиотеки в свои сборки. Например, в стороннем модуле madmen.indexnow используется composer (/bitrix/modules/madmen.indexnow/src/google/vendor/composer, /bitrix/modules/madmen.indexnow/src/google/vendor/psr), версия которого может конфликтовать с аналогичными библиотеками в Битрикс, учитывая, что они были недавно обновлены.
Вы можете самостоятельно найти все сторонние composer через консоль сервера для библиотек:
psr/container
psr/http-client
psr/http-message
psr/log
Далее перейдите в папку модуля с composer (например, /bitrix/modules/madmen.indexnow/src/google/vendor/composer) и обновите его командой:
composer upgrade
Ошибка должна быть устранена.
В нашем же случае было все проще, мы проверили все пути, где могут располагаться кастомизированные файлы со сторонними composer:
/local/
/bitrix/templates/<шаблон сайта>/components/bitrix/
/bitrix/templates/.default/components/bitrix/
/bitrix/php_interface/init.php
/bitrix/modules/
При проверке было замечено, что когда-то была создана и благополучно оставлена копия шаблона в /bitrix/templates/ для проверки работы решения из Маркетплейс службой поддержки решения. Данные папки с копией шаблона были удалены, их пути:
/home/bitrix/www/bitrix/templates/aspro_max_test_tp
/home/bitrix/www/bitrix/templates/aspro_max_testi
Внимание! Всегда делайте резервную копию проекта или снапшот сервера перед любыми обновлениями и изменениями на сервере!
В итоге ошибка в конфликте библиотек PSR c composer при обновлении 1С-Битрикс до 23.650.100 ушла, после исправления и повторного обновления сайт успешно заработал.