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

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
Наверх