Php cache index html

Кэширование страниц в 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 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_filetime_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();

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

Читайте также:  Php get file and line number

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

cleaning_cache_katalog($type, $file="")

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

cache_content();//Буферизируем контент файла ?>   
Имя Почта Адрес
maksim Maksik1@yandex.ru http://users.oskol.ru/~dergach/
haupt_cache(); ?>

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

Источник

Простая и эффективная система кеширования PHP

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

Шаг первый. Создаем файл top-cache.php

Нам нужно создать два файла. Первый: создаем файл с именем top-cache.php и копируем в него следующий код:

\n"; include($cachefile); exit; > ob_start(); // Запуск буфера вывода ?>

Что происходит в данном коде? Первые 5 строк создают имя файла кеша в соответствии с текущем PHP файлом. Например, если мы используем файл с именем list.php , файл кеша будет иметь вид cached-list.html .

Строка 6 создает переменную $cachetime , которая определяет время жизни кеша.

Строки с 9 по 13 определяют условное выражение, которое служит для проверки наличия файла с именем, определенным в переменной $cachefile . Если файл существует, вставляется комментарий и файл, определенный в переменной $cachefile . Затем выражение exit прерывает выполнение скрипта и файл отправляется браузеру клиента. То есть, если найден статичный файл, то PHP код не будет выполняться сервером.

Читайте также:  Print window with javascript

Строка 14 создает буфер, если файл, определенный переменной $cachefile не найден.

Шаг второй. Создаем файл bottom-cache.php

Теперь создаем второй файл PHP с именем bottom-cache.php и копируем в него следующий код:

Если файл с именем, определенным в переменной $cachefile отсутствует на сервере, выполняется данный код и создается файл. При следующем обращении к странице статичный $cachefile будет обслуживать браузер клиента вместо выполнения всего кода скрипта PHP.

Шаг три. Включаем файлы кеширования в код страницы

Теперь у нас есть два необходимых файла. Просто включаем их в страницу PHP, которую нужно кешировать. Файл top-cache.php нужно включить в начало страницы, а файл bottom-cache.php — в конце:

Теперь, если проверить кеширование на медленных страницах, то можно убедиться, насколько они стали быстрее загружаться.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.catswhocode.com/blog/how-to-create-a-simple-and-efficient-php-cache
Перевел: Сергей Фастунов
Урок создан: 2 Октября 2012
Просмотров: 61724
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Читайте также:  Html css javascript compressor

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Источник

Оцените статью