Proxyr
Мой дом здесь!
- Регистрация
- 17 Авг 2011
- Сообщения
- 156
- Реакции
- 247
- Автор темы
- #1
Прошу помощи в решении. Задача состоит в том, что бы зациклить скрипт на самого себя.
Сейчас скрипт, по нажатию на кнопку, выполняет то что между /*начало*/ и /*конец*/
Но массив данных, с которым он работает ($myarrayecho) слишком большой и через 30 сек выполнение гасится. Я вот подумал обработать массив частями, сделал срез массива и подготовил данные для POST запроса ($urlpost если конечно надо).
Может кто поможет с решением, как зациклить этот промежуток между /*начало*/ и /*конец*/.
Сейчас скрипт, по нажатию на кнопку, выполняет то что между /*начало*/ и /*конец*/
Но массив данных, с которым он работает ($myarrayecho) слишком большой и через 30 сек выполнение гасится. Я вот подумал обработать массив частями, сделал срез массива и подготовил данные для POST запроса ($urlpost если конечно надо).
Может кто поможет с решением, как зациклить этот промежуток между /*начало*/ и /*конец*/.
PHP:
<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/petrofstudio.fotoart/include.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/petrofstudio.fotoart/prolog.php");
IncludeModuleLangFile(__FILE__);
set_time_limit(0);
CModule::IncludeModule("iblock");
$IBLOCK_ID = intval($_REQUEST['IBLOCK_ID']);
$IBLOCK_TYPE_ID = $_REQUEST['IBLOCK_TYPE_ID'];
$CODE_PROP = $_REQUEST['IMG_CODE_PROP'];
$CODE_WHERE = $_REQUEST['IMG_CODE_WHERE'];
$new = $_REQUEST['NEW'];
$i = $_REQUEST['I'];
$l = $_REQUEST['L'];
$strError = "";
$io = CBXVirtualIo::GetInstance();
$file_pointer = $_SERVER["DOCUMENT_ROOT"]."/upload/tmp/petrof/serialize.txt";
$step = 200; // сколько позиций обработать за один проход
/*начало*/
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["backButton"]) && strlen($_POST["backButton"]) > 0) {
if ($IBLOCK_ID=='')
$strError.= GetMessage("FOTOART_NO_IBLOCK_ID")."<br>";
if ($CODE_PROP=='')
$strError.= GetMessage("FOTOART_NO_CODE_PROP")."<br>";
if ($IBLOCK_ID!='' && $CODE_PROP!='') {
$res = CIBlockProperty::GetByID($CODE_PROP, $IBLOCK_ID, $IBLOCK_TYPE_ID);
if(!$ar_res = $res->GetNext())
$strError.= GetMessage("FOTOART_NO_CODE_PROP_IBLOCK")."<br>";
}
if(strlen($strError) <= 0) {
/**/
if ( !$file_handle = fopen($file_pointer, 'rb') ) exit;
$myarrayecho = unserialize( fread($file_handle, filesize($file_pointer)) );
fclose($file_handle);
// срез массива
if (!isset($old)) {
$i = 0;
$l = 0;
$old = 0;
$new = $step;
} else {
$old = $new;
$new = $new + $step;
}
$myarrayecho = array_slice($myarrayecho, $old, $new);
# обработка файлов
if(!empty($myarrayecho)):
foreach($myarrayecho as $key=>$item) {
$prop_ar_val = explode(".",$item["name"]);
$prop_val = $prop_ar_val[0];
$temp_f = "temp.".$prop_ar_val[1];
// закачивание файла
# получение ID элемента по свойству
$arSelectItem = Array("ID", "NAME");
$arFilterItem = Array("IBLOCK_ID"=>$IBLOCK_ID, "PROPERTY_".$CODE_PROP=>$prop_val);
$resItem = CIBlockElement::GetList(Array(), $arFilterItem, false, Array("nPageSize"=>1), $arSelectItem);
if($obItem = $resItem->GetNextElement())
{
$arFieldsItem = $obItem->GetFields();
# обновление картинки
$el = new CIBlockElement;
$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(),
$CODE_WHERE."_PICTURE" => CFile::MakeFileArray($local_file)
);
if($el->Update($arFieldsItem['ID'], $arLoadProductArray)) {
$i++;
}
else {
$l++;
}
}
else {
$l++;
}
}
else:
$strError.= GetMessage("FOTOART_ADM_ZIP_IS_EMPTY")."*<br>";
endif;
# заканчиваем загрузку фотографий
}
/*
$urlpost =
'IBLOCK_TYPE_ID='.$IBLOCK_TYPE_ID.
'&IBLOCK_ID='.$IBLOCK_ID.
'&IMG_CODE_PROP='.$CODE_PROP.
'&IMG_CODE_WHERE='.$CODE_WHERE.
'&backButton='.$_POST["backButton"].
'&NEW='.$new.
'&I = '.$i.
'&L = '.$l;
*/
}
/*конец*/
$APPLICATION->SetTitle(GetMessage("PAGE_TITLE"));
$aTabs = array();
$aTabs[] = array("DIV" => "edit", "TAB" => GetMessage('TITLE'), "ICON"=>"iblock_type", "TITLE"=>GetMessage('TITLE'));
$tabControl = new CAdminTabControl("tabControl", $aTabs);
$bVarsFromForm = false;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
CJSCore::Init(array("jquery"));
$aContext = array(
array(
"ICON" => "btn_list",
"TEXT"=>GetMessage("MAIN_ADMIN_MENU_LIST"),
"LINK"=>$back_url,
"TITLE"=>GetMessage("MAIN_ADMIN_MENU_LIST")
),
);
$context = new CAdminContextMenu($aContext);
$context->Show();
CAdminMessage::ShowMessage($strError);
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["backButton"]) && strlen($_POST["backButton"]) > 0 && $strError=='') {
$str_success_detail = str_replace("#COL_SUCCESS#",$i,GetMessage("FOTOART_ADM_EXP_LINES_EXPORTED"));
$str_success_detail = str_replace("#COL_ERROR#",$l,$str_success_detail);
echo CAdminMessage::ShowMessage(array(
"TYPE" => "PROGRESS",
"MESSAGE" => GetMessage("FOTOART_ADM_EXP_SUCCESS"),
"DETAILS" => $str_success_detail,
"HTML" => true,
));
}
?>
<form method="post" action="<?echo $APPLICATION->GetCurPage()?>" enctype="multipart/form-data" name="post_form" id="post_form">
<?$aTabs = array(
array(
"DIV" => "edit1",
"TAB" => GetMessage("FOTOART_ADM_IMP_TAB1") ,
"ICON" => "iblock",
"TITLE" => GetMessage("FOTOART_ADM_IMP_TAB1_ALT"),
) ,
);
$tabControl = new CAdminTabControl("tabControl", $aTabs, false, true);
$tabControl->Begin();
$tabControl->BeginNextTab();
?>
<tr>
<td><?echo GetMessage("FOTOART_ADM_IMP_INFOBLOCK"); ?></td>
<td>
<?echo GetIBlockDropDownList($IBLOCK_ID, 'IBLOCK_TYPE_ID', 'IBLOCK_ID', false, 'class="adm-detail-iblock-types"', 'class="adm-detail-iblock-list"'); ?>
</td>
</tr>
<tr>
<td class="adm-detail-valign-top"><?echo GetMessage("FOTOART_ADM_IMG_CODE_PROP"); ?>:</td>
<td>
<input type="text" name="IMG_CODE_PROP" size="40" value="ARTNUMBER<?//echo htmlspecialcharsbx($CODE_PROP); ?>">
</td>
</tr>
<tr>
<td width="40%"><?echo GetMessage("FOTOART_ADM_IMG_CODE_WHERE"); ?>:</td>
<td width="60%">
<select name="IMG_CODE_WHERE">
<option value="DETAIL"><?echo GetMessage("FOTOART_ADM_IMG_CODE_WHERE_DETAIL"); ?></option>
<option value="PREVIEW"><?echo GetMessage("FOTOART_ADM_IMG_CODE_WHERE_PREVIEW"); ?></option>
</select>
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="backButton" value="<?echo GetMessage("FOTOART_ADM_IMG_LOAD"); ?>" class="adm-btn-save"></td>
</tr>
<?
$tabControl->End();
?>
</form>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>