Наверх
 

Навигация
Опрос
Есть ли на этом сайте что-нибудь полезное для Вас?
Да, конечно есть
Нет
Пока еще не нашел

База уроков » » » Кэширование в PHP

Кэширование в PHP

28 янв 2014 | Комментариев: 0 | Просмотров: 1358

Давно интересовался классом кэширования данных в php которые выводятся скриптом. Так зачем же вообще использовать кэширование и что нужно кэшировать?

Когда вы запрашиваете страницу, сервер собирает ее на PHP. Время сборки всегда зависит от скорости выполнения скриптов. К примеру, если на сайте имеются блоки, которые редко обновляются, их можно кэшировать.

Что за блоки? Например это может быть многоуровневое меню которое выводится из базы, список последних постов в блоге, новые комментарии или любая другая информация. Кэшируя этот вывод в файл мы избавляемся от излишних запросов в базу.

 

И так, привожу сразу листинг самого класса:

 

<?
	 
	class cache {
	 
	 var $cache_cont;                // Кэшируемый контент
	 
	 var $cache_url;                 // Адрес для сохраниения кэшированых файлов
	 
	 var $time_diff;                 // Через какой промежуток времени кэшировать
	 
	 var $its_all_cache _ok;
	 
	 var $fullpath;
	 
	 function CacheGo($urlsite,$time_for_cache,$path) {
	 
	   $this->cacheurl="cache_".md5($urlsite);
	 
	   $this->fullpath=$path.$this->cacheurl;
	 
	   $this->time_diff =time()-@filemtime ($this->fullpath);
	 
	   if ($this-> time_diff <$time_for_cache){
	 
	    include ($this->fullpath);
	 
	    $this->its_all_cache _ok=1;
	 
	  }
	 
	 }
	 
	 function CacheInitial() {
	 
	   ob_start();
	 
	 }
	 
	 function CacheClr() {
	 
	   ob_end_clean();
	 
	 }
	 
	 function CacheGet () {
	 
	   $this->cache_cont = ob_get_contents();
	 
	   return $this->cache_cont;
	 
	 }
	 
	 function CacheInpAndWr() {
	 
	  echo $this->cache_cont;
	 
	  $fp = @fopen ($this->fullpath, "w");        // Открываем файл на запись
	 
	  @fwrite ($fp, $this->cache_cont);           // Записываем кешируемую информацию в файл
	 
	  @fclose ($fp);                              // Закрываем файл
	 
	 }
	 
	}
	 
	?>

 

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

 

Вместо:

 

 

<?php
	 
	include 'sidebar.php';
	 
	?>

 

Получаем:

 

<?php
	 
	$cl_cache = new cache();
	 
	// Кэширование бокового сайдбара
	 
	$cl_cache -> CacheGo($_SERVER['REQUEST_URI'], 3600, rtrim($_SERVER['DOCUMENT_ROOT'],'/')."/cache/");
	 
	if ($cl_cache->its_all_cache _ok!=1) {
	 
	  $cl_cache->CacheInitial();
	 
	  include 'sidebar.php';
	 
	  $cl_cache->CacheGet();
	 
	  $cl_cache-> CacheClr();
	 
	  $cl_cache-> CacheInpAndWr ();
	 
	}
	 
	unset($cl_cache);
	 
	?>

 

 

В функцию CacheGo мы передаем три параметра:

Первый параметр – текущая(кэшируемая) страница, или другой любой уникальный идентификатор для данного кэша. К примеру можно взять не только текущий адрес (URL), но и например текущий раздел. Если этот блок одинаковый для всех страниц, то просто пропишите название раздела, например «main_content».

Второй — время в секундах, на какое мы закэшируем блок. 3600 секунд это один час.

Третий — Путь, где будет храниться кэш вывода скрипта. Не забудьте поставить права на папку 777.

Скрипт работает очень просто.

  • Сперва скрипт проверяет наличие файла в кэше, и если он есть, сверяет время его создания.
  • Если он устарел, или кэшируемый файл еще не создан, то буферизирует вывод и записывает его в файл кэша

 



Ссылка на новость:

    html-cсылка на публикацию
    BB-cсылка на публикацию
    Прямая ссылка на публикацию

ЕЩЕ НА ЭТУ ТЕМУ:

Вывод в php date() на русском

Вывод в php date() на русском

Сегодня поговорим о том, как вывести значение функции date php на русском. Достаточно актуальная задача, сам с ней столкнулся недавно.
Как узнать ip адрес посетителя в php скрипте?

Как узнать ip адрес посетителя в php скрипте?

Узнаем IP адрес посетителя на сайте.
Как писать ошибки выполнения скриптов в файл

Как писать ошибки выполнения скриптов в файл

Все php ошибки нужно обязательно записывать в лог, и регулярно изучать его. Иначе есть шанс пропустить часть багов, которые появляются например перед
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.