Кеширование динамики, жесткий метод

Статус
В этой теме нельзя размещать новые ответы.

lordBlack

Мой дом здесь!
Регистрация
29 Ноя 2007
Сообщения
623
Реакции
267
вообщем включил на сайте через .htaccess принудительное кеширование посредтвом ниже приведенной схемы:
код внутри htacces
PHP:
php_value auto_prepend_file /www/user/www/htdocs/start_cache.php
php_value auto_append_file /www/user/www/htdocs/end_cache.php

start_cache.php
PHP:
<?php
$settings_cachedir = '/www/user/www/htdocs/cache_files/';
$settings_cachetime = 360; //время жизни кэша (1 час)
$thispage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$cachelink = $settings_cachedir.md5($thispage).".html";
if (file_exists($cachelink)) {
    $cachelink_time = filemtime($cachelink);

    if ((time() - $settings_cachetime) < $cachelink_time) {
        readfile($cachelink);die();
    }
}
ob_start();
?>

end_cache.php
PHP:
<?php
$fp = fopen($cachelink, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
?>

при этом как бэ папко растет cache_files поэтому решил крон напрячь со скриптом:
PHP:
<?php
function delete_f($file,$del=1) {
    if(file_exists($file)) {
        if(is_dir($file)) {
            $handle=opendir($file); 
            while(false!==($file1=readdir($handle))) {
                if($file1!='.' && $file1!='..') {
                    delete_f($file.'/'.$file1,$del);
                }
            }
            closedir($handle);
            if($del==1) {
                @chmod($file,0777);
                rmdir($file);
            }
        }
        else {
            @chmod($file,0777);
            if(file_exists($file)) unlink($file);
        }
    }
    else return false;
}
delete_f('/www/user/www/htdocs/cache_files/',0);  
?>

вообщем столкнулся с такой траблой, скрипт зачистки работает всего 1 раз, после чего он благополучно кешируется, и не работает))))))))))
как нарисовать исключение для конкретного файла?
 
ну как вариант на пхп
файл start_cache.php
PHP:
<?php
$settings_cachedir = '/www/user/www/htdocs/cache_files/'; 
$settings_cachetime = 360; //время жизни кэша (1 час)
$thispage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$isCached = true;
//любой метод определения какой файл запросили
$filename = $_SERVER['SCRIPT_FILENAME']; // $_SERVER['SCRIPT_FILENAME'] $_SERVER['SCRIPT_NAME']
$filename = basename($filename);
$skipCache = array('cron.php'); // добавляем имена файлов для игнора
if (in_array($filename, $skipCache))
    $isCached = false;
if ($isCached)
{
    $cachelink = $settings_cachedir.md5($thispage).".html";
    if (file_exists($cachelink)) {
        $cachelink_time = filemtime($cachelink);
        if ((time() - $settings_cachetime) < $cachelink_time) {
            readfile($cachelink);die();
        }
    }
}
ob_start();
файл end_cache.php
PHP:
<?php
if ($isCached)
{
    $fp = fopen($cachelink, 'w');
    fwrite($fp, ob_get_contents());
    fclose($fp);
}
ob_end_flush();
P.S. только смотри, что бы переменные $isCached и $cachelink в скриптах не изменялись ;)
 
хм... а можно еще файлы с расширениями заблочить? чтобы не кешировались?
а то сайт по сути с файлами под скачку jar формат имеют, они тоже лезут в кеширование...
*.jar например?
 
хм... а можно еще файлы с расширениями заблочить? чтобы не кешировались?
а то сайт по сути с файлами под скачку jar формат имеют, они тоже лезут в кеширование...
*.jar например?

PHP:
if (in_array($filename, $skipCache))

замени на

PHP:
if ((in_array($filename, $skipCache)) || (preg_match ("/\.jar$/i", $filename, $empty)))
 
хм... усложняем задачу.
скачка файлов идет по префиксу:
site_ru/files/&files=12345
откуда уже скачивается добро, в 16 разных форматах.
проще прописать запрет на files/ на месте
$skipCache = array('cron.php');
$skipCache = array('files/'); ?

или прописать эти 16 форматов?
 
PHP:
if (in_array($filename, $skipCache) OR substr_count($filename,"files/"))
 
все бы ничего но увы...кешируется все подряд.... т.е. и файлы тоже
 
не кэшируется потому что выше по тексту
PHP:
$filename = basename($filename);
в имени файла уже отсутствует путь к нему...
а вы ищете часть пути "files/"
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху