© DenisBunakov.ru 2012 - 2020 Официальный партнер 1С-Битрикс

Можем обсудить все по телефону: +7-923-137-16-27

Автоматическая отчистка устаревшего кеша на cron bitrix clean_expire_cache();

Автоматическая отчистка устаревшего кеша на cron bitrix clean_expire_cache(); - Проблема многих сайтов на Битриксе - неочищенный кеш! Сайт постоянно складывал в кеш страницы, место начает заполняться, и приходиться постоянно очищать кеш в ручную. Знакомо? Давайте решим эту проблему

Проблема многих сайтов на Битриксе - неочищенный кеш! Сайт постоянно складывал в кеш страницы, место начает заполняться, и приходиться постоянно очищать кеш в ручную. Знакомо? Давайте решим эту проблему

Мой клиент решал эту проблему путем напоминания в телефоне  - "Очистит кеш на сайте"! Да реально, каждую неделю заходил и очищал в ручную.

Бред! А если запустить рекламную кампанию, то трафик то увеличится, страниц в кеше станет еще больше, к тому же страница может измениться, а посетителю отдается старая, это в корне не верно,  вот именно по этому я и решил переложить это все на cron, благо в bitrix API очень продумано, не зря старались, в итоге поразмыслив в dev, обнаружил функцию clean_expire_cache();, которую можно как раз использовать для этого.

Итак идем по пути /bitrix/php_interface/ и init.php создаем файл, если еще не создан, если создан, то добавляем ниже следующее:


 
function clean_expire_cache($path = "") {
    if (!class_exists("CFileCacheCleaner")) {
        require_once ($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/cache_files_cleaner.php");
    }
    $curentTime = mktime();
    if (defined("BX_CRONTAB") && BX_CRONTAB === true) $endTime = time() + 5; //Если на кроне, то работаем 5 секунд
    else $endTime = time() + 1; //Если на хитах, то не более секунды
    //Работаем со всем кешем
    $obCacheCleaner = new CFileCacheCleaner("all");
    if (!$obCacheCleaner->InitPath($path)) {
        //Произошла ошибка
        return "clean_expire_cache();";
    }
    $obCacheCleaner->Start();
    while ($file = $obCacheCleaner->GetNextFile()) {
        if (is_string($file)) {
            $date_expire = $obCacheCleaner->GetFileExpiration($file);
            if ($date_expire) {
                if ($date_expire < $curentTime) {
                    unlink($file);
                }
            }
            if (time() >= $endTime) break;
        }
    }
    if (is_string($file)) {
        return "clean_expire_cache(\"" . $file . "\");";
    }
    else {
        return "clean_expire_cache();";
    }
}

Далее переходим в админку bitrix и создаем агента на странице


Настройки > Настройки продукта > Агенты

Настраиваем так:

  • Функция clean_expire_cache();

  • Сортировка: 100 

  • Интервал (сек): 10. 

Вот и все.

Код работает циклично и возобновляется там где остановился, помимо этого предусмотрена работа на cron и на хитах. В скрипте помечен участок кода, можно изменить эти значения. Интервал также можно задать не 10 секунд, а минуту, к примеру.






Денис Бунаков

ТОП20 веб разработчиков по СФО

C 2012 года разрабатываю и поддерживаю сайты на 1С Битрикс. У меня вы можете заказать услуги по разработки или поддержке сайта на битриксе

smm.bunakov@yandex.ru

+7-923-137-16-27

Возврат к списку


Нажимая на кнопку "Отправить", вы даете согласие на обработку персональных данных