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

Содержание файла /inner/autoInclude/cache.php

if(!$GLOBALS['system_cache']){// класс работы с кэш-данными
	class system_cache{
		function system_cache(){
			if($GLOBALS['SYSTEM']['site_id'] && $q=mysql_query("SELECT name, time_modified FROM ".SYSTEM_PREFIX."cache WHERE site_id='".$GLOBALS['SYSTEM']['site_id']."'")){
				while($r=mysql_fetch_array($q)){
					$this->name[$r['name']] = $r['time_modified'];
				}
			}
		}
		function file_($path='', $ext='', $prefix='', $pathroot=false){// возвращает имя кэш-файла
			if(!$path){
				$path = $_SERVER['DOCUMENT_ROOT'].'/cache'.$_SERVER['PHP_SELF'];
			}else if(!$pathroot){
				$ex = @explode($_SERVER['DOCUMENT_ROOT'], str_replace('\\','/',$path));
				$path = $_SERVER['DOCUMENT_ROOT'].'/cache'.($ex['1']? $ex['1'] : $ex['0']);
			}
			$filename = array_reverse(explode('/', $path));
			return str_replace($filename['0'], $prefix.$filename['0'], $path) . $ext;
		}
		function old($name=''){// узнаем, устарел ли кэш-файл с данными
			
			if(!$name){ $name = $this->file_(); }
			
			$time_modified = @filemtime($name);
			
			if(!$time_modified || $time_modified < $this->name[ $name ]){
				return true;// устарел
			}else{
				return false;// не устарел
			}
		}
		function update($name=''){// сохраняем время изменения кэша
			if($GLOBALS['SYSTEM']['site_id']){
				
				if(!$name){ $name = $this->file_(); }
				
				$time_modified = time();//(time()+1);
				
				if($this->name[ $name ]){
					mysql_("UPDATE ".SYSTEM_PREFIX."cache SET time_modified="._.$time_modified._." "._."WHERE"._." site_id="._.$GLOBALS['SYSTEM']['site_id']._." AND name="._.$name._."");
				}else{
					mysql_("INSERT INTO ".SYSTEM_PREFIX."cache VALUES ("._.$GLOBALS['SYSTEM']['site_id']._.", "._.$name._.", "._.$time_modified._.")");
				}
				$this->name[ $name ] = $time_modified;
			}
		}
	}
	$GLOBALS['system_cache'] = new system_cache();
}
?>


Предложения и пожелания:

 

Обсуждения на форуме:

Кто-нибудь может мне помочь???

Помогите пожалуйста с "nofollow"

Будущее ЯPro

Чат

Создание меню

Ошибки в логах

Нужна помощь в реализации

Полезное:

Видео-обучение

Работа с шаблонами

Документация API

База данных и её таблицы

Регистрация на форуме

Скачать последнюю версию

Связь с авторами

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2019 YaPro.Ru

Лебеденко Николай Николаевич
Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter