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

Тема в разделе "Как сделать...", создана пользователем lordBlack, 2 окт 2010.

Статус темы:
Закрыта.
  1. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    вообщем включил на сайте через .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($fpob_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 раз, после чего он благополучно кешируется, и не работает))))))))))
    как нарисовать исключение для конкретного файла?
     
  2. jo0o00nyy

    jo0o00nyy Постоялец

    Регистр.:
    12 май 2010
    Сообщения:
    65
    Симпатии:
    27
    ну как вариант на пхп
    файл 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($fpob_get_contents());
        
    fclose($fp);
    }
    ob_end_flush();
    P.S. только смотри, что бы переменные $isCached и $cachelink в скриптах не изменялись ;)
     
    lordBlack нравится это.
  3. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    хм... а можно еще файлы с расширениями заблочить? чтобы не кешировались?
    а то сайт по сути с файлами под скачку jar формат имеют, они тоже лезут в кеширование...
    *.jar например?
     
  4. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    PHP:
    if (in_array($filename$skipCache))
    замени на

    PHP:
    if ((in_array($filename$skipCache)) || (preg_match ("/\.jar$/i"$filename$empty)))
     
    lordBlack нравится это.
  5. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    хм... усложняем задачу.
    скачка файлов идет по префиксу:
    site_ru/files/&files=12345
    откуда уже скачивается добро, в 16 разных форматах.
    проще прописать запрет на files/ на месте
    $skipCache = array('files/'); ?

    или прописать эти 16 форматов?
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    PHP:
    if (in_array($filename$skipCache) OR substr_count($filename,"files/"))
     
    lordBlack нравится это.
  7. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    все бы ничего но увы...кешируется все подряд.... т.е. и файлы тоже
     
  8. tribut

    tribut Создатель

    Регистр.:
    16 мар 2009
    Сообщения:
    41
    Симпатии:
    8
    не кэшируется потому что выше по тексту
    PHP:
    $filename basename($filename); 
    в имени файла уже отсутствует путь к нему...
    а вы ищете часть пути "files/"
     
Статус темы:
Закрыта.