Документация для разработчиков
Темная тема

AbortDataCache

void public CPHPCache::AbortDataCache();

Метод отменяет запись данных в кеш после вызова StartDataCache. Метод нестатический.

AbortDataCache используют, когда блок кеширования уже открыт, но результат нельзя сохранять: данные не получены, ответ содержит ошибку или дальнейшее выполнение сценария должно завершиться без создания кеша. Метод закрывает текущий сеанс кеширования и не вызывает запись через EndDataCache.

Параметры вызова

Метод не принимает параметров.

Возвращаемое значение

Метод не возвращает значение.

Особенности

  • Метод действует только для текущего объекта CPHPCache и текущего блока, начатого через StartDataCache.
  • Если кеширование не было начато, метод завершает работу без дополнительных действий.
  • Если для объекта кеша включен вывод, метод закрывает буфер вывода через ob_end_flush. Уже сформированный вывод будет отправлен, но не будет сохранен в кеш.
  • После вызова AbortDataCache не вызывайте EndDataCache для того же блока: запись уже отменена.

Смотрите также

  • InitCache и GetVars используют, чтобы проверить кеш и получить сохраненные данные.
  • StartDataCache вызывают перед формированием данных, которые можно сохранить в кеш.
  • EndDataCache вызывают вместо AbortDataCache, когда результат нужно записать в кеш.

Примеры

Отмена записи в кеш, если данные для блока не получены. Если открыть страницу с параметром ?empty=Y, пример вызовет AbortDataCache и не создаст кеш. Если открыть страницу без параметра, результат запишется в кеш на 60 секунд, и время в строке товара не изменится до истечения TTL.

$cache = new CPHPCache();
$cacheTime = 60;
$cacheId = 'abort_data_cache_example';
$cacheDir = '/abort_data_cache_example';

$items = [];
$fromCache = false;

if ($cache->InitCache($cacheTime, $cacheId, $cacheDir))
{
    $items = $cache->GetVars();
    $fromCache = true;
}
elseif ($cache->StartDataCache($cacheTime, $cacheId, $cacheDir))
{
    // Для проверки отмены кеширования добавьте к URL параметр ?empty=Y
    $items = (isset($_GET['empty']) && $_GET['empty'] === 'Y')
        ? []
        : [
            ['ID' => 1, 'NAME' => 'Товар для примера', 'TIME' => date('H:i:s')],
        ];

    if (empty($items))
    {
        $cache->AbortDataCache();
    }
    else
    {
        $cache->EndDataCache($items);
    }
}

echo $fromCache ? 'Данные получены из кеша<br>' : 'Данные сформированы заново<br>';

if (!empty($items))
{
    foreach ($items as $item)
    {
        echo htmlspecialcharsbx($item['NAME']) . ': ' . htmlspecialcharsbx($item['TIME']) . '<br>';
    }
}
else
{
    echo 'Данные не получены и не записаны в кеш<br>';
}


© «Битрикс», 2001-2026, «1С-Битрикс», 2026