Устранение ошибок Битрикс после обновления 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']; |