// cron_wrapper.php
define(POS_END, -1);
define(FRESHNESS_TIME, 86400); // сутки
function start_update($position, $flagFile) {
$crmContact = new CAllCrmContact(false);
$contactsRoundCount = 20000;
$dbResult = $crmContact->GetList(
array('ID' => 'DESC'),
array('CHECK_PERMISSIONS' => 'N'),
array('ID', 'NAME', 'LAST_NAME', 'FULL_NAME', 'DATE_CREATE', 'ASSIGNED_BY_ID')
// добавить LIMIT => $position, $contactsRoundCount
);
$i = 0;
while ($contact = $dbResult->GetNext())
{
// здесь вносятся изменения в бд и сохранаются логи в файл
$i++;
if ($contactsRoundCount <= $i) {
// дошли до последней записи, прекращаем выполнение скрипта
// записываем данные о позиции в flagFile
file_put_contents($flagFile, $position+$i);
}
}
// если вышли из while до достижения $contactsRoundCount значит данные для обновлений закончились
if ($i <= $contactsRoundCount) {
file_put_contents($flagFile, POS_END);
}
}
$flagFile = 'current.pos';
if (file_exists($flagFile)) {
$currentPos = file_get_contents($flagFile);
if ($currentPos == POS_END) {
if (time() - filemtime($flagFile) > FRESHNESS_TIME) {
$currentPos = 0;
unlink($flagFile);
} else {
die("Nothing to update");
}
}
}
start_update($currentPos, $flagFile);