Класс разработан для работы с информацией в кэшируемых файлах.
Подключается файлом по адресу: /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~}
Комментарии
Комментариев пока нет.