+7 495 008 8452
  • Загрузка
Выберите ваш цвет
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.

Вы регулярно очищаете кэш «Битрикс»? Никогда не забываете? А если нет, то как вы можете быть уверены, что посетители сайта видят обновленную версию, а не кэшированную? Предлагаем решение, агент для регулярной автоматической очистки кэша «Битрикс».

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 . "\");";
}


Удачи!

-------------------------------
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...