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