Устранение ошибок Битрикс после обновления PHP до 8.2
Выпала задача обновить на одном из сайтов PHP с 7.3 до 8.2. на операционной системе RedOS. Далее что делал.
Обновление PHP
dnf install php81-release
dnf clean all
dnf makecache
dnf update php
Обновление БД
alter table b_iblock_element_property modify ID bigint not null auto_increment;
Далее необходимо из панели администратора обновить ядро и сторонние решения до актуальных версий.
После чего лично у меня стала вылезать ошибка вида:
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
На строки в коде вида:
<?if(count($templateData['GALLERY_BIG'])):?>
А всё просто. Если в PHP 7.3 допустимо было так обращаться к переменным не являющимися массивами, то в PHP 8.2, где введено более строгое отношение к типизации, так уже нельзя. Поэтому все подобные конструкции нужно заменить на вида:
<?php
$templateData['GALLERY_BIG'] = (array)$templateData['GALLERY_BIG'];
if(count($templateData['GALLERY_BIG'])):
....
?>
Ну или я просто поискал все подобные конструкции которые встречаются в файле и в шапку добавил:
$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'];

