на вхроде - Json массив,
эелемент массива - описание товара : id (если нет - создается новый), наименование, свойства (до 20 свойств)
Так вот - обработка массива из 5 элементов занимает секунд 10....
подскажите пжл - куда копать ?
<?
//header('Content-Type: text/html; charset=utf-8');
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if (!CModule::IncludeModule('iblock')) die('Отсутствует основной модуль информационных блоков!');
$data_packet = file_get_contents('php://input');
if (!$data_packet = json_decode($data_packet)) die("Неверное декодирование json параметров");
foreach($data_packet as $i=>$data)
{
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
// ре-кодировка
foreach($data->fields as $key=>&$field)
{
if ($key == 'IBLOCK_ID' or $key == 'IBLOCK_SECTION_ID') $field = intval($field);
elseif ($key == 'SORT') $field = floatval($field);
$fields[$key] = $field;
}
foreach($data->props as $key => $prop)
{
$props[intval($key)] = $prop;
}
// ре-кодировка
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
// проверки корректности входных параметров
$iblockID = $fields['IBLOCK_ID'];
if(empty($iblockID) or !is_numeric($iblockID))
{
$result_arr[$i] ='Неверно задан код инфоблока';
continue;
}
if (!$result = CIBlock::GetByID($iblockID)->Fetch())
{
$result_arr[$i] ='Инфоблока с кодом '.$iblockID.' не существует';
continue;
}
$elementID = intval($data->id);
if(!empty($elementID))
{
if (!is_numeric($elementID))
{
$result_arr[$i] ='Неверно задан формат ID элемента. Должно быть целое число.';
continue;
}
if (!CIBlockElement::GetList(array(), array("IBLOCK_ID"=>$iblockID, "ID"=>$elementID), array(), false))
{
$result_arr[$i] ='В указанном инфоблоке '.$iblockID.' нужного элемента $elementID не найдено';
continue;
}
}
if (empty($elementID) && empty($fields['CODE']))
{
// для новых элементов - обязательно заданиче симв. кода из 1С
$result_arr[$i] ='Не задан символьный код элемента';
continue;
}
if (empty($elementID) && empty($fields['NAME']))
{
$result_arr[$i] ='Не задано имя элемента NAME';
continue;
}
// проверки корректности входных параметров
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
// $arProperties
//$arProperties = array();
if (!empty($props))
{
if ($elementID)
{
// если это UPDATE - нужно считать установленные свойства, т.к. по логике битрикс
// должны передаваться ВСЕ значения свойств при их изменении
$arFilter = array("IBLOCK_ID"=>$iblockID, "ID"=>$elementID);
$res = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), array("ID", "IBLOCK_ID", "PROPERTY_*"));
$ob = $res->GetNextElement();
$arProps = $ob->GetProperties();
foreach($arProps as $key => $propData)
{
$ID = $propData["ID"];
if (empty($props[$ID])) $arProperties[$key] = $propData["VALUE"];
else $arProperties[$key] = $props[$ID];
}
}
else // !$elementID
{
$arProperties = $props;
}
}
if (!empty($arProperties)) $fields['PROPERTY_VALUES'] = $arProperties;
// $arProperties
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
// IMG_URL
/*if (!empty($fields["MAIN_IMG_URL"]))
{
$file = CFile::MakeFileArray($fields["MAIN_IMG_URL"]);
$fields['DETAIL_PICTURE'] = $file;
$fields['PREVIEW_PICTURE'] = $file;
}*/
$fields['DETAIL_PICTURE'] = array('del' => 'Y');
$fields['PREVIEW_PICTURE'] = array('del' => 'Y');
// IMG_URL
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////
$fields['TYPE'] = 1;
$cElement = new CIBlockElement();
//////////////////////////////////////////////////////////// ////////////////
// ДОБАВЛЕНИЕ
if (!$elementID){ //ADD
/*print_r("ADD\n");
print_r($fields);*/
$elementID = $cElement->Add($fields);
if ($elementID)
{
//добавляем элемент в товарный каталог
CCatalogProduct::add(array("ID" => $elementID, "TYPE" => 1));
$result_arr[$i] = 'sucsess:'.$elementID;
}
else $result_arr[$i] = "error:".$cElement->LAST_ERROR;
}
// ДОБАВЛЕНИЕ
//////////////////////////////////////////////////////////// ////////////////
//////////////////////////////////////////////////////////// ////////////////
// ИЗМЕНЕНИЕ
else
{ //UPDATE
/*print_r("UPDATE\n");
print_r($elementID."\n");
print_r("is_numeric = ".is_numeric($elementID)."\n");
print_r($fields); */
$result = $cElement->Update($elementID, $fields);
if ($result)
{
//print_r($fields);
$result_arr[$i] = 'sucsess';
}
else
{
$result_arr[$i] = "error:".$cElement->LAST_ERROR.'<br>';
}
}
// ИЗМЕНЕНИЕ
//////////////////////////////////////////////////////////// ////////////////
}
$result_arr = utf8ize($result_arr);
echo json_encode($result_arr);
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
?>
эелемент массива - описание товара : id (если нет - создается новый), наименование, свойства (до 20 свойств)
Так вот - обработка массива из 5 элементов занимает секунд 10....
подскажите пжл - куда копать ?
<?
//header('Content-Type: text/html; charset=utf-8');
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if (!CModule::IncludeModule('iblock')) die('Отсутствует основной модуль информационных блоков!');
$data_packet = file_get_contents('php://input');
if (!$data_packet = json_decode($data_packet)) die("Неверное декодирование json параметров");
foreach($data_packet as $i=>$data)
{
////////////////////////////////////////////////////////////
// ре-кодировка
foreach($data->fields as $key=>&$field)
{
if ($key == 'IBLOCK_ID' or $key == 'IBLOCK_SECTION_ID') $field = intval($field);
elseif ($key == 'SORT') $field = floatval($field);
$fields[$key] = $field;
}
foreach($data->props as $key => $prop)
{
$props[intval($key)] = $prop;
}
// ре-кодировка
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// проверки корректности входных параметров
$iblockID = $fields['IBLOCK_ID'];
if(empty($iblockID) or !is_numeric($iblockID))
{
$result_arr[$i] ='Неверно задан код инфоблока';
continue;
}
if (!$result = CIBlock::GetByID($iblockID)->Fetch())
{
$result_arr[$i] ='Инфоблока с кодом '.$iblockID.' не существует';
continue;
}
$elementID = intval($data->id);
if(!empty($elementID))
{
if (!is_numeric($elementID))
{
$result_arr[$i] ='Неверно задан формат ID элемента. Должно быть целое число.';
continue;
}
if (!CIBlockElement::GetList(array(), array("IBLOCK_ID"=>$iblockID, "ID"=>$elementID), array(), false))
{
$result_arr[$i] ='В указанном инфоблоке '.$iblockID.' нужного элемента $elementID не найдено';
continue;
}
}
if (empty($elementID) && empty($fields['CODE']))
{
// для новых элементов - обязательно заданиче симв. кода из 1С
$result_arr[$i] ='Не задан символьный код элемента';
continue;
}
if (empty($elementID) && empty($fields['NAME']))
{
$result_arr[$i] ='Не задано имя элемента NAME';
continue;
}
// проверки корректности входных параметров
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// $arProperties
//$arProperties = array();
if (!empty($props))
{
if ($elementID)
{
// если это UPDATE - нужно считать установленные свойства, т.к. по логике битрикс
// должны передаваться ВСЕ значения свойств при их изменении
$arFilter = array("IBLOCK_ID"=>$iblockID, "ID"=>$elementID);
$res = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), array("ID", "IBLOCK_ID", "PROPERTY_*"));
$ob = $res->GetNextElement();
$arProps = $ob->GetProperties();
foreach($arProps as $key => $propData)
{
$ID = $propData["ID"];
if (empty($props[$ID])) $arProperties[$key] = $propData["VALUE"];
else $arProperties[$key] = $props[$ID];
}
}
else // !$elementID
{
$arProperties = $props;
}
}
if (!empty($arProperties)) $fields['PROPERTY_VALUES'] = $arProperties;
// $arProperties
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// IMG_URL
/*if (!empty($fields["MAIN_IMG_URL"]))
{
$file = CFile::MakeFileArray($fields["MAIN_IMG_URL"]);
$fields['DETAIL_PICTURE'] = $file;
$fields['PREVIEW_PICTURE'] = $file;
}*/
$fields['DETAIL_PICTURE'] = array('del' => 'Y');
$fields['PREVIEW_PICTURE'] = array('del' => 'Y');
// IMG_URL
////////////////////////////////////////////////////////////
$fields['TYPE'] = 1;
$cElement = new CIBlockElement();
////////////////////////////////////////////////////////////
// ДОБАВЛЕНИЕ
if (!$elementID){ //ADD
/*print_r("ADD\n");
print_r($fields);*/
$elementID = $cElement->Add($fields);
if ($elementID)
{
//добавляем элемент в товарный каталог
CCatalogProduct::add(array("ID" => $elementID, "TYPE" => 1));
$result_arr[$i] = 'sucsess:'.$elementID;
}
else $result_arr[$i] = "error:".$cElement->LAST_ERROR;
}
// ДОБАВЛЕНИЕ
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// ИЗМЕНЕНИЕ
else
{ //UPDATE
/*print_r("UPDATE\n");
print_r($elementID."\n");
print_r("is_numeric = ".is_numeric($elementID)."\n");
print_r($fields); */
$result = $cElement->Update($elementID, $fields);
if ($result)
{
//print_r($fields);
$result_arr[$i] = 'sucsess';
}
else
{
$result_arr[$i] = "error:".$cElement->LAST_ERROR.'<br>';
}
}
// ИЗМЕНЕНИЕ
////////////////////////////////////////////////////////////
}
$result_arr = utf8ize($result_arr);
echo json_encode($result_arr);
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
?>