system_cache

Класс разработан для работы с информацией в кэшируемых файлах.

Подключается файлом по адресу: /inner/autoInclude/cache.php или /inner/autoInclude/off/cache.php

При подключении находит данные о кешируемых объектах, которые хранит в массиве $GLOBALS['system_cache']->name

Пример хранения данных в переменной:

$GLOBALS['system_cache']->name['путь к кешируемому файлу или его имя'] = 'дата изменения файла в формате UNIX';

Класс имеет 3 функции: file_(), old(), update()

file_() - возвращает полный путь к файлу

Синтаксис: file_($path='', $ext='', $prefix='', $pathroot=false) file_($prefix='', $type='', $path='', $pathroot=false)

$prefix - возможный префикс для конечного названия файла (удобно когда нужны различные имена кэш-файлов)

$prefix - расширение файла (окончание файла, полезно когда нужно сохранить кэш как HTML-документ при этом указав тип .html)

$path - полный путь к файлу (если не указать - формируется автоматически из переменной $_SERVER['PHP_SELF'])

$pathroot - если объявлен, то $path считается путем указанным от корня сервера, в противном случае - от корня сайта

Пример:

Предположим, что кэш-функция file_() запускается из файла /home/site.ru/script.php

$cache_file_path = $GLOBALS['system_cache']-> file_('', '', '1');// имя кэш-файла будет следующим: /home/site.ru/1script.php

$cache_file_path = $GLOBALS['system_cache']-> file_('/home/site.ru/cache/myfile.php');// путь к файлу будет следующим: /home/site.ru/cache/myfile.php

$cache_file_path = $GLOBALS['system_cache']-> file_('/home/site.ru/cache/myfile.php', '', '2');// путь к файлу будет следующим: /home/site.ru/cache/2myfile.php

$cache_file_path = $GLOBALS['system_cache']-> file_('', '.html');// путь к файлу будет следующим: /home/site.ru/script.php.html

$cache_file_path = $GLOBALS['system_cache']-> file_('', '.html', '3');// путь к файлу будет следующим: /home/site.ru/3script.php.html

$cache_file_path = $GLOBALS['system_cache']-> file_('/home/site.ru/cache/myfile.php', '.html', '4');// путь к файлу будет следующим: /home/site.ru/cache/4myfile.php.html

old() - возвращает true - если кэш-файл устарел, false - если кэш-файл в актуальном состоянии

Синтаксис: old($name='')

$name - имя файла кешируемых данных или путь к нему (в общем уникальный идентификатор, какой он будет решать Вам)

Примечание: если $cache_file_path не задан, то он определяется автоматически через $GLOBALS['system_cache']-> file_();

Пример:

$cache_file_path = $GLOBALS['system_cache']-> file_();// узнаем имя кэш-файла

if( !$GLOBALS['system_cache']-> old( $cache_file_path ) ){// если кэш-файл в актуальном состоянии

include_once( $cache_file_path );// подгружаем кэш-данные

}else{// кэш-файл устарел

// находим актуальные данные

write_( $cache,  $cache_file_path );// записываем актуальные данные в кэш-файл

}

*примечание: пре передаче данных в метод old() указанный путь к файлу $cache_file_path должен быть полным

update() - сохраняем время изменения кэш-файла

Синтаксис: update($name='')

$name - имя файла кешируемых данных

Примечание: если $name не задан, то он определяется автоматически через $GLOBALS['system_cache']-> file_();

Пример:

$cache_file_path = $GLOBALS['system_cache']-> file_();// узнаем имя кэш-файла

$GLOBALS['system_cache']-> update( $cache_file_path );

Внимание: при использовании данного класса время изменения файла кешируемых данных можно узнать по его имени, к примеру:

echo $GLOBALS['system_cache']->name[ $cache_file_path ];// покажет время Timestamp изменения файла

Пример с применением файла:

$my_cache_file = $_SERVER['DOCUMENT_ROOT'].'/cache/file.php';// формируем имя кэш-файла

if(!$GLOBALS['system_cache']-> old( $my_cache_file ) && is_file( $my_cache_file )){// если кэш в актуальном состоянии

include_once( $my_cache_file );// подгружаем кэш-данные

}else{

$my_array = (1,2,3);// формируем какие-то php-данные

$GLOBALS['system_cache']->update($my_cache_file);// обновляю кэш-записи о смайлах

write_('<?php '.$GLOBALS["phpToStr"]->toStr($my_array, 'my_array').' ?>', $my_cache_file );// записываем данные в кэш-файл

}

Пример с применением кэш-имени:

$my_cache_file = $_SERVER['DOCUMENT_ROOT'].'/cache/file.php';// формируем имя кэш-файла

if($GLOBALS['system_cache']->name['my_cache'] && $GLOBALS['system_cache']->name['my_cache'] <= filemtime( $my_cache_file )){// если кэш в актуальном состоянии

include_once( $my_cache_file );// подгружаем кэш-данные

}else{

$my_array = (1,2,3);// формируем какие-то php-данные

$GLOBALS['system_cache']->update('my_cache');// обновляю кэш-записи о смайлах

write_('<?php '.$GLOBALS["phpToStr"]->toStr($my_array, 'my_array').' ?>', $my_cache_file );// записываем данные в кэш-файл

}

Пример 1 - проверка изменения страниц сайта

$file = $GLOBALS['system_cache']-> file_(substr(__FILE__,0,-3).'.html');// формируем имя кэш-файла

if($GLOBALS['system_cache']->name['pages'] && $GLOBALS['system_cache']->name['pages'] < filemtime($file)){
    
    $document = @file_get_contents($file);
    
}else{
    
    $document = $this-> data('name', 123);
    
    if($document){
        
        write_($in, $file);
        
    }
}

Пример 2 - проверка изменения страниц сайта

$parent_id = '1,2,3';

$file = $GLOBALS['system_cache']-> file_(substr(__FILE__,0,-3).md5($parent_id).'.html');// формируем имя кэш-файла

if($GLOBALS['system_cache']->name['pages'] && $GLOBALS['system_cache']->name['pages'] < filemtime($file)){
    
    $in = @file_get_contents($file);
    
}else{
    
    if($q=mysql_query(sql('page_id','parent_id IN ('.$parent_id.')'))){
        
        $in = '';
        
        while($r = mysql_fetch_assoc($q)){
            
            $in .= $r['page_id'].',';
            
        }
        if($in){
            
            write_($in, $file);
            
        }
    }
}

substr(__FILE__,0,-3) - сделано специально, т.к. в некоторых хостинг-компаниях выявлена проблема хранения данных в файлах с расширением php

{~$yapro_echo_file = '/inner/autoInclude/cache.php';~AND~yapro_echo_file.php~}


19.07.2009 09:49

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru