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