Добрый день, попросили помочь с проблемой, ситуация такова, что сайт постоянно складывал в кеш страницы, место начало заполняться, и приходилось постоянно очищать кеш в ручную, ну это крайне не удобно, согласитесь, т.е. ставишь себе напоминалку, типо раз в неделю заходи и очищай, бред, а если запустить рекламную кампанию, то трафик то увеличится, страниц в кеше станет еще больше, к тому же страница может измениться, а посетителю отдается старая, это в корне не верно, вот именно по этому я и решил переложить это все на cron, благо в bitrix API очень продумано, не зря старались, в итоге поразмыслив в dev, обнаружил функцию clean_expire_cache();, которую можно как раз использовать для этого.
Итак идем по пути /bitrix/php_interface/ и init.php создаем файл, если еще не создан, если создан, то добавляем ниже следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<? 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 секунд, а минуту, к примеру.
Как проверить работу вашего скрипта «Автоматическая отчистка устаревшего кеша на cron bitrix clean_expire_cache();» ?
Наличие свободного дискового пространства свидетельствует об отсутствии кеша после его отчистки