Last active
May 25, 2018 21:53
-
-
Save dryks/a1fc752b050d709a1c0f48cdc9544d29 to your computer and use it in GitHub Desktop.
cache.php система кэша по времени
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// взято отсюда http://www.realcoding.net/articles/keshirovanie-stranits-v-php.html | |
/* | |
require_once("/cache.php"); //Подключаем класс | |
$new=new CACHE; //Объявляем класс | |
$new->cache_content();//Буферизируем контент файла | |
$new->haupt_cache(); | |
?> | |
*/ | |
CLASS CACHE | |
{//Begin class | |
//Название класса | |
var $name="WebCachePage"; | |
//Версия класса кэширования | |
var $version="_v_1.0"; | |
//Хэш код файла | |
var $hash_code="4444"; | |
//Каталог кэширования файлов | |
var $dir_cache="/cache"; | |
//Переменная содержащая дату последнего кэширования, которую получаем в результате вычислений | |
var $modifi_file; | |
//Время последней модификации | |
//Устанавливается в секундах, по умолчанию 10 мин | |
var $time_file_cache="1800"; | |
//Хранение значения контента файла | |
//При буферизации | |
var $CONTENT; | |
/* | |
---------------------------------------------- | |
Главная функция кэшируемых файлов | |
---------------------------------------------- | |
*/ | |
function haupt_cache() | |
{ | |
$this->code_file(); //Получение хэш кода файла | |
$this->clean_content(); //Получение и отчистка буфера | |
if($this->file_and_katalog_isset()==FALSE) $this->create_cache_file(); //Создания файла кэша если его нет | |
else $this->cache_file(); //Проверка последней модификации | |
if($this->modifi_file>$this->time_file_cache) $this->mod_file_cache(); //Модифицирование файла кэша | |
} | |
/* | |
------------------------------------------------------------------------------- | |
Функция проверки существования файла и каталога кэширования | |
------------------------------------------------------------------------------- | |
*/ | |
function file_and_katalog_isset() | |
{ | |
if(file_exists($this->dir_cache."/".$this->hash_code.".php")) return TRUE; //Проверяет существование файла в каталоге кэширования | |
else return FALSE; | |
} | |
/* | |
---------------------------------------------- | |
Функция кэширования контента файла | |
---------------------------------------------- | |
*/ | |
function cache_content() | |
{ | |
ob_start(); //Кэшируем контент файла | |
} | |
/* | |
------------------------------------------------------- | |
Функция преобразования url файла в хэш код | |
------------------------------------------------------- | |
*/ | |
function code_file() | |
{ | |
$url=$_SERVER['REQUEST_URI']; //Получаем url файла | |
$hashcode_file=md5($url); //Хэш код файла | |
$this->hash_code=$hashcode_file; | |
} | |
/* | |
---------------------------------------------------------------------------------- | |
Функция создания файла кэша если его нет в каталоге кэширования | |
---------------------------------------------------------------------------------- | |
*/ | |
function create_cache_file() | |
{ | |
$open=fopen($this->dir_cache."/".$this->hash_code.".php", "at") or die(trigger_error("Невозможно открыть файл ".$this->hash_code.".php [".$this->name.$this->version."]", E_USER_ERROR)); //Создаём файл с кэшем | |
flock($open, LOCK_EX);//Блокируем файл | |
rewind($open); //Установка позиции в начало файла | |
$time_create_file=time(); //Время создания кэшируемого файла | |
$write_file=$this->CONTENT.""; //Формируем контент файла для записи | |
fwrite($open, $write_file); //Записываем данные | |
fclose($open); //Закрываем файл | |
readfile($this->dir_cache."/".$this->hash_code.".php"); | |
} | |
/* | |
------------------------------------------------------------- | |
Функция проверки последнего кэширования файла | |
------------------------------------------------------------- | |
*/ | |
function cache_file() | |
{ | |
$fopen=fopen($this->dir_cache."/".$this->hash_code.".php", "rt") or die(trigger_error("Невозможно открыть файл ".$this->hash_code.".php [".$this->name.$this->version."]", E_USER_ERROR)); //Открываем файл | |
$fread=fread($fopen, filesize($this->dir_cache."/".$this->hash_code.".php")); //Прочитываем контент файла | |
preg_match_all("/(<!--)([0-9]{10})(-->)/i", $fread, $time_mod); //Ишем дату последней модификации файла | |
fclose($fopen);//Закрываем файл с кэшем | |
$mod_file=time()-$time_mod[2][0]; //Время последнего кэширования файла | |
$this->modifi_file=$mod_file; //Присваиваем модификацию файла переменной | |
if($this->modifi_file<$this->time_file_cache) //Проверяем время последнего кэширования | |
{ | |
readfile($this->dir_cache."/".$this->hash_code.".php"); //Подключаем файл | |
} | |
} | |
/* | |
------------------------------------------------------------------------------------------ | |
Функция модификации файла если время полседнего кэширования истекло | |
------------------------------------------------------------------------------------------ | |
*/ | |
function mod_file_cache() | |
{ | |
unlink($this->dir_cache."/".$this->hash_code.".php"); //Удаляем кэшируемый файл так как время последней модификации истекло | |
$open=@fopen($this->dir_cache."/".$this->hash_code.".php", "at") or die(trigger_error("Невозможно открыть файл ".$this->hash_code.".php [".$this->name.$this->version."]", E_USER_ERROR)); //Открываем файл | |
flock($open, LOCK_EX);//Блокируем файл | |
rewind($open); //Установка позиции в начало файла | |
$time_create_file=time(); //Время создания кэшируемого файла | |
$write_file=$this->CONTENT."<!--".$time_create_file."-->"; //Формируем контент файла для записи | |
fwrite($open, $write_file); //Записываем данные | |
fclose($open); //Закрываем файл | |
readfile($this->dir_cache."/".$this->hash_code.".php"); | |
} | |
/* | |
------------------------------------------- | |
Функция отчистки каталога с кэшем | |
------------------------------------------- | |
*/ | |
function cleaning_cache_katalog($type, $file="") | |
{ | |
switch($type) | |
{ | |
case"all": | |
$dir=opendir($this->dir_cache); //Открываем каталог с кэшем | |
while($delete_file=readdir($dir)) //Читаем каталог с кэшем в цикле | |
{ | |
unlink($this->dir_cache."/".$delete_file); //Удаляем все файлы | |
} | |
closedir($dir); | |
break; | |
case"file": | |
if(unlink($this->dir_cache."/".$file)) echo"Файл кэша ".$file." успешно удалён из каталога"; //Удаляем файл из каталога с кэшем | |
else trigger_error("Невозможно удалить файл с кэшем [".$this->name.$this->version."]", E_USER_ERROR); //Выводми сообщение об ошибке | |
break; | |
default: | |
trigger_error("Такой команда отсутствует [".$this->name.$this->version."]", E_USER_ERROR); //Сообщение об ошибке | |
break; | |
} | |
} | |
/* | |
--------------------------------- | |
Функция получения буфера | |
--------------------------------- | |
*/ | |
function clean_content() | |
{ | |
$this->CONTENT=ob_get_contents(); //Записываем буфер в переменную | |
ob_end_clean(); //Отчищаем буфер | |
} | |
}//End_class | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment