Здравствуйте!
По рекомендации битрикса сделал переход с PHP5.5 на PHP 7.3.6. Обнаружил одну проблему, выполнил полное обновление и она исчезла. Появилась снова через пару дней. Непонятно как такое может быть, откат на более младшие версии PHP теперь ничего не дает.
Хотелось понять что необходимо будет переписывать, возможно это то, что смогу сделать сам.
Суть ошибки:
При сохранении элемента инфоблока «Товарный каталог» вижу
[Error]
[FONT="Courier New"]Cannot use string offset as an array (0)[/FONT]
[FONT="Courier New"]/var/www/vhosts/svetozon.ru/httpdocs/bitrix/php_interface/init.php:1604[/FONT]
[FONT="Courier New"]#0: check_not_prod(array)[/FONT]
[FONT="Courier New"] /var/www/vhosts/svetozon.ru/httpdocs/bitrix/modules/main/classes/general/module.php:475[/FONT]
[FONT="Courier New"]#1: ExecuteModuleEventEx(array, array)[/FONT]
[FONT="Courier New"] /var/www/vhosts/svetozon.ru/httpdocs/bitrix/modules/iblock/classes/general/iblockelement.php:4599[/FONT]
[FONT="Courier New"]#2: CAllIBlockElement->CheckFields(array, integer, boolean)[/FONT]
[FONT="Courier New"] /var/www/vhosts/svetozon.ru/httpdocs/bitrix/modules/iblock/classes/mysql/iblockelement.php:1307[/FONT]
[FONT="Courier New"]#3: CIBlockElement->Update(integer, array, boolean, boolean, boolean)[/FONT]
[FONT="Courier New"] /var/www/vhosts/svetozon.ru/httpdocs/bitrix/modules/iblock/admin/iblock_element_edit.php:1063[/FONT]
[FONT="Courier New"]#4: require(string)[/FONT]
[FONT="Courier New"] /var/www/vhosts/svetozon.ru/httpdocs/bitrix/admin/iblock_element_edit.php:1[/FONT]
[B]В файлах:[/B]
[B]init.php[/B]
}
if (!is_array($arFields["PROPERTY_VALUES"][454]))
[B][COLOR=#ff0000]{[/COLOR][/B]
[B][COLOR=#ff0000]$arFields["PROPERTY_VALUES"][454][$arFields["ID"].':454']["VALUE"]="";[/COLOR][/B]
[B] [/B]
}
module.php[COLOR=#ff0000][/COLOR]
//TODO: Возможно заменить на EventManager::getInstance()->getLastEvent();
global $BX_MODULE_EVENT_LAST;
$BX_MODULE_EVENT_LAST = $arEvent;
if(isset($arEvent["TO_METHOD_ARG"]) && is_array($arEvent["TO_METHOD_ARG"]) && count($arEvent["TO_METHOD_ARG"]))
$args = array_merge($arEvent["TO_METHOD_ARG"], $arParams);
else
$args = $arParams;
[B][COLOR=#ff0000]return call_user_func_array($arEvent["CALLBACK"], $args);[/COLOR][/B]
}
[B]iblockelement.php[/B]
$APPLICATION->ResetException();
if($ID===false)
$db_events = GetModuleEvents("iblock", "OnBeforeIBlockElementAdd", true);
else
{
$arFields["ID"] = $ID;
$db_events = GetModuleEvents("iblock", "OnBeforeIBlockElementUpdate", true);
}
foreach($db_events as $arEvent)
{
[B][COLOR=#ff0000] $bEventRes = ExecuteModuleEventEx($arEvent, array(&$arFields));[/COLOR][/B]
[B]iblockelement.php[/B]
[B][COLOR=#ff0000] $arFields["IBLOCK_ID"] = $ar_element["IBLOCK_ID"];[/COLOR][/B]
[B][COLOR=#ff0000] [/COLOR][/B]
[B][COLOR=#ff0000] if(!$this->CheckFields($arFields, $ID, $bCheckDiskQuota) || strlen($strWarning))[/COLOR][/B]
[B][COLOR=#ff0000] {[/COLOR][/B]
$this->LAST_ERROR .= $strWarning;
$Result = false;
$arFields["RESULT_MESSAGE"] = &$this->LAST_ERROR;
iblock_element_edit.php
if($ID > 0)
{
$bCreateRecord = false;
[B][COLOR=#ff0000]$res = $bs->Update($ID, $arFields, $WF=="Y", true, true);[/COLOR][/B]
}
else
{
[B]iblock_element_edit.php[/B]
[COLOR=#ff0000]<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/admin/iblock_element_edit.php");?>[/COLOR]