Класс 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() — очищает буфер вывода и отключает буферизацию вывода.

Читайте также:  Python replace multiple values

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 my admin обновить

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

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

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

Код файла cache.php

 else < self::$keys[] = $name; return false; >> else < return ''; >> /** * Отправка данных в кэш. */ public static function set($content) < if (self::$enable) < $name = array_pop(self::$keys); $dir = __DIR__ . self::$path . '/'; if (!is_dir($dir)) < @mkdir($dir, 0777, true); >file_put_contents($dir . '/' . $name . '.tmp', $content); > return $content; > /** * Начало кэширования фрагмента. */ public static function begin($name) < if ($content = self::get($name)) < echo $content; return false; >else < ob_start(); return true; >> /** * Завершение кэширования фрагмента. */ public static function end() < echo self::set(ob_get_clean()); >/** * Очистка кэша. */ public static function clear() < $dir = __DIR__ . self::$path; foreach (glob($dir . '/*') as $file) < if (is_file($file)) < unlink($file); >> > >

Использование

// Подключаем файл класса require_once ‘/cache.php’; // Кэшируем фрагмент кода if (Cache::begin(‘test’)) < ?>

Теперь, если в папке cache нет файла test.tmp, то условие выполнится, контент выведется и сохранится в файле. В другом случаи контент всегда будет выводится из файла кэша.

Источник

Кэширование данных в PHP — ускоряем просмотр страниц

Кэширование данных в PHP - ускоряем просмотр страниц

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

Схема как работает кэширование данных:

Схема как работает кэширование данных

Просмотрим класс который берет на себя ключевую роль в процессе кэширования данных в нашем примере и обсудим каждый метод класса в отдельности.

Метод function saveCache($File, $Content)
$File — Будущее имя кеш-файла
$Content — Содержимое кеш-файла
Метод создает новый файл или переписывает содержимое уже существовавшего
файла с таким же именем. После изменении со стороны метода saveCache,
метод isActualCache будет считать содержимое кэша актуальной так как
дата последнего изменения обновляется.

Метод function cacheExists($File)
Проверяет если в папке cache существует HTML файл с именем $File

Метод function isActualCache($File)
Переменная $this->cache_time хранит в себе время актуальности кэш-файла в
секундах. Если кеш-файл был создан/изменен более 3600сек(1 час) назад то
он считается просроченным и метод возвращает ноль(False) или
единицу(True) если время кеш-файла ещё не истекло.

Метод function view($File)
Проверяет если в папке cache существует HTML файл с именем $File потом открывает его содержимое.

Метод function deleteCache($File)
Удаляет кэш-файл с именем $File.

Посмотрим простой пример который работает с вышеупомянутом классом.

Источник

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