Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Не смотря на простоту и удобство работы с механизмом кеширования в продукте, у него есть один существенный недостаток: не удаляется устаревший кеш. Связано это с тем, что при работе с компонентами продукт формирует уникальный путь к файлу с кешем на основании входящего параметра $cache_id, т.е. файл с кешем создаётся по определённому пути, либо перезаписывается актуальными данными, удаления какого-либо произвольного файла не предполагается по определению.
В данной статье предлагается агент, который периодически запускается, сканирует директории с кешем, вычисляет устаревший и удаляет его.
Не стал нагружать скрипт автосозданием агента, поэтому его придётся создать руками, настройки следующие:
Сам код агента, который необходимо поместить в файл /bitrix/php_interface/init.php (если его нет, то создайте).
Итак, ключевые моменты.
Определяем, сколько будет работать наш агент. Если исполняется не на CRON'е, то лучше больше секунды не ставить:
Благодаря коду:
процесс удаления получается пошаговым, т.е. начинает он работать оттуда, где закончил.
Спасибо за внимание.
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Агент для удаления устаревшего кеша
Доброго времени суток!Не смотря на простоту и удобство работы с механизмом кеширования в продукте, у него есть один существенный недостаток: не удаляется устаревший кеш. Связано это с тем, что при работе с компонентами продукт формирует уникальный путь к файлу с кешем на основании входящего параметра $cache_id, т.е. файл с кешем создаётся по определённому пути, либо перезаписывается актуальными данными, удаления какого-либо произвольного файла не предполагается по определению.
В данной статье предлагается агент, который периодически запускается, сканирует директории с кешем, вычисляет устаревший и удаляет его.
Не стал нагружать скрипт автосозданием агента, поэтому его придётся создать руками, настройки следующие:
Сам код агента, который необходимо поместить в файл /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();"; } } |
Итак, ключевые моменты.
Определяем, сколько будет работать наш агент. Если исполняется не на CRON'е, то лучше больше секунды не ставить:
if (defined("BX_CRONTAB") && BX_CRONTAB === true) $endTime = time()+5; //Если на кроне, то работаем 5 секунд else $endTime = time()+1; //Если на хитах, то не более секунды |
Благодаря коду:
if (is_string($file)) { return "clean_expire_cache(\"".$file."\");"; } |
Спасибо за внимание.
Назад в раздел
Подписаться на новые материалы раздела: