Устранение ошибок Битрикс после обновления PHP до 8.2
Выпала задача обновить на одном из сайтов PHP с 7.3 до 8.2. на операционной системе RedOS. Далее что делал.
Обновление PHP
| 1 2 3 4 | dnf install php81-release dnf clean all dnf makecache dnf update php | 
Обновление БД
| 1 | alter table b_iblock_element_property modify ID bigint not null auto_increment; | 
Далее необходимо из панели администратора обновить ядро и сторонние решения до актуальных версий.
После чего лично у меня стала вылезать ошибка вида:
| 1 2 | count(): Argument #1 ($value) must be of type Countable|array, null given (0) /var/www/html/bx-site/bitrix/templates/aspro-allcorp2/components/bitrix/news.detail/services/component_epilog.php:21 | 
На строки в коде вида:
| 1 | <?if(count($templateData['GALLERY_BIG'])):?> | 
А всё просто. Если в PHP 7.3 допустимо было так обращаться к переменным не являющимися массивами, то в PHP 8.2, где введено более строгое отношение к типизации, так уже нельзя. Поэтому все подобные конструкции нужно заменить на вида:
| 1 2 3 4 5 6 | <?php $templateData['GALLERY_BIG'] = (array)$templateData['GALLERY_BIG']; if(count($templateData['GALLERY_BIG'])): .... ?> | 
Ну или я просто поискал все подобные конструкции которые встречаются в файле и в шапку добавил:
| 1 2 3 4 5 6 | $templateData['VIDEO'] = (array)$templateData['VIDEO']; $templateData['VIDEO_IFRAME'] = (array)$templateData['VIDEO_IFRAME']; $templateData['GALLERY_BIG'] = (array)$templateData['GALLERY_BIG']; $templateData['LINK_SALE'] = (array)$templateData['LINK_SALE']; $templateData['LINK_NEWS'] = (array)$templateData['LINK_NEWS']; $arElement['PROPERTY_LINK_STAFF_VALUE'] = (array)$arElement['PROPERTY_LINK_STAFF_VALUE']; |