Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
MP3 To Ringtone Gold v3.02
Mobtime Cell Phone Manager v5.3.1
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Интернет технологии -> PHP -> Кэширование страниц в PHP


Кэширование страниц в PHP

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

Из-за того что многие интернет пользователи, особенно в России выходят в Интернет через обычный модем, а скорость как Вы знаете полное г.... Загрузки страниц через модем происходит со скорость в среднем 4 кБ в секунду, представте если вы загружаете страницу весом 60 кБ или ещё хуже 100 кБ, то ожидать вам придёться от 15 до 25 секунд. А если сюда приплюсовать большое количество sql запросов в скрипте и возможно неоптимизированный код то..... Поэтому я предлагаю кэшировать страницы с помощью класса WebCachePage_v_1.0. Подробно описывать все функции класса я не буду, а расскажу принцип работы класса и как им пользоваться. С кодом я думаю Вы и сами разберётесь. Изначально класс создавался как дополнение к обработчику шаблонов WebTemplate_v_1.1 (в скором времени я представлю его Вам). Принцип работы класса основан на трёх стандартных функциях php:


ob_start() - включает буферизацию вывода данных.
ob_get_contents() - возвращает содержимое буфера (можно загнать в переменную).
ob_end_clean() - очищает буфер вывода и отключает буферизацию вывода. C помощью функции ob_start() - буферизируем контент файла, потом с помощью функции ob_get_contents() загоняем контент файла в переменную и наконец очищаем буфер функцией ob_end_clean().

Код класса (к сожалению ссылку, чтобы его скачать дать не могу, так как нет сервера):

  CLASS CACHE
{//Begin class
//Название класса
var $name="WebCachePage";
//Версия класса кэширования
var $version="_v_1.0";
//Хэш код файла
var $hash_code=""; 
//Каталог кэширования файлов
var $dir_cache="cache";
//Переменная содержащая дату последнего кэширования, которую получаем в
// результате вычислений
var $modifi_file;
//Время последней модификации
//Устанавливается в секундах, по умолчанию 10 мин
var $time_file_cache=600; 
//Хранение значения контента файла
//При буферизации
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=$GLOBALS['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("/()/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.""; //Формируем контент файла для записи
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 

Для того чтобы начать работу с классом Вам необходимо создать каталог для кэшируемых файлов (по умолчанию cache). Затем включить класс в файл который будет кэшироваться с помощью функций include, require, но лучше всего require_once. После всех проделанных действий в начале документа Вам необходимо объявить класс и вызвать функцию буферизации:

       $new=new CACHE; 
     $new->cache_content();     


Далее идёт сам файл который будем кэшировать и в конце файла вызывается главная функция кэширования:

    $new->haupt_cache(); 

Если вы вдруг захотите отчистить весь каталог с кэшируемыми файлами для этого есть специальная функция

cleaning_cache_katalog($type, $file="")

Для работы с функцией вам необходимы два параметра $type - задаёт тип отчистки каталога (all - весь каталог, file - отдельный файл). Если вдруг вы захотите удалить отдельный файл с кэшем Вам необходимо в параметре $type указать file, а в параметре $file - имя файла. Приведём пример index.php:

 <?php 
 require_once("cache_class.php"); //Подключаем класс 
 $new=new CACHE; //Объявляем класс 
 $new->cache_content(); //Буферизируем контент файла 
 ?> 
 <html> 
 <body> 
 <table border=1> 
 <tr> 
 <td> 
 Имя 
 </td> 
 <td> 
 Почта 
 </td> 
 <td> 
 Адрес 
 </td> 
 </tr> 
 <tr> 
 <td> 
 maksim 
 </td> 
 <td> 
 Maksik1@yandex.ru 
 </td> 
 <td> 
 http://users.oskol.ru/~dergach/ 
 </td> 
 </tr> 
 </table> 
 <?php 
 $new->haupt_cache(); 
 ?> 


Вот и всё. Удачи Вам в изучении PHP.

Автор: maksim
Источник: www.realcoding.net

Ссылки по теме
Чтение почты через Web-интерфейс
Полезные скрипты на PHP
PHP и формы
Почтовые функции в РНР
Отправка электронной почты с помощью PHP
 

Компьютерная документация от А до Я - Главная

 
Популярные книги

Практические работы по Excel на уроках информатики

Подробнее

Windows XP для всех

Подробнее

Самоучитель работы на компьютере Издание 9

Подробнее


 
Новости ИТ
04.12.2008  В Windows 7 запуск приложений Direct3D 10/10.1 будет возможен на CPU
04.12.2008  eGo BlackBelt и Encrypt - пара новых портативных HDD Iomega с зашитой данных
04.12.2008  A-DATA выпускает двух- и трёхканальные наборы памяти DDR3-1800+ в серии XPG Plus
04.12.2008  MOTOROKR EM35
04.12.2008  Шведский производитель ковриков для мышей выпустил игровую гарнитуру
04.12.2008  eGo BlackBelt и Encrypt - пара новых портативных HDD Iomega с защитой данных
04.12.2008  Вышла вторая бета-версия Windows Vista SP2
04.12.2008  Внешний SSD-накопитель с поддержкой eSATA и USB
04.12.2008  Флэшка OCZ со встроенным кард-ридером
04.12.2008  Весрия «ПАУ» 1.8.2 будет содержать новый функционал
04.12.2008  Компания «Русские Информационные Технологии» подготовила бета-версию программы «Печать конвертов!»
04.12.2008  Телефон премиум-класса с двумя SIM-картами
04.12.2008  High-end десктопы Asus Eee Box
04.12.2008  Видеокарта NVIDIA Quadro FX 4800 для профессионалов
04.12.2008  Экстремальные внешние HDD от Iomega
04.12.2008  MSI EX300 - 13.3 дюйма для развлечения
04.12.2008  SATA 3.0 появится в следующем году
04.12.2008  Mini-ITX-плата Zotac на основе логики NVIDIA и с поддержкой Wi-Fi
04.12.2008  Корпус NZXT Zero 2: улучшенное охлаждение и строгий дизайн
04.12.2008  Конвертеры: Xilisoft Video Converter v.5.1.7.1128
 
Полезно

 
Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100