Cache php files as html

Кэширование данных страниц в php

Кэширование данных страниц в php

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

Что такое кэширование?

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

На сегодняшний день кэши бываю двух типов — локальные и общие.

  • Локальный — кеш, хранимый на диске у клиента, создаваемый, а также управляемый его интернет-браузером.
  • Общий — это кэш прокси-сервера провайдера, он может состоять из одного или ряда прокси-серверов.

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

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

Читайте также:  Systemd php script daemon

Ключевые принципы сохранения страниц в кэш

PHP-приложение может управлять кэшированием результатов его работы формируя дополнительные поля в заголовке HTTP ответа вызовом специальной функции Header().

Несколько общих утверждений, которые характерны не только для PHP-приложений:

  • Странички, которые передаются по POST не сохраняются в кэш никогда.
  • Странички, которые запрашиваются по GET и содержат параметры (в URL есть ‘?’) не сохраняются в кэш, в случае если не указано обратное.

В большинстве ситуаций каких-то дополнительных инструкций в приложение добавлять не нужно. Основные нюансы, на которые надо обратить внимание:

  • запрет кэширования документов, которые кэшируются по умолчанию;
  • кэширование документов, которые не подлежат кэшированию по умолчанию.

Структура кэширования в php

Запрет на кэширования документов (которые кэшируются по умолчанию)

Эта задача возникает для PHP-скриптов, которые вызываются без параметров или являются индексами директорий, но формируют информацию персонально под пользователя (к примеру на основе user agent или же cookies) или работают на основе быстро изменяющихся сведений. Мы по спецификации HTTP/1.1 можем управлять такими полями:

  1. Expires — задает дату истечения срока годности определенного документа. Задание ее в прошлом определяет запрет кэш для этой странички.
  2. Cache-control: no-cache — управление кэшем. Значение no-cache определяет запрет кэш этой странички. Для версии протокола HTTP/1.0 здесь действует «Pragma: no-cache».
  3. Last-Modified — это дата последнего изменения определенного содержимого. Поле применяется исключительно для статических страничек. Apache заменяет данное поле значением поля Date для динамически генерируемых страничек, в частности для страниц, которые содержат SSI.

Чтобы запретить кэширование, достаточно прописать:

header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");

Для того, чтобы документ пометить как «устаревший», необходимо установить Expires равным полю Date.

header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT");

Не следует также забывать о том, что формы, которые запрошены по POST кэшированию не подлежат.

Кэширование с прогнозируемым обновлением

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

Главной задачей здесь является получить дату следующего понедельника в виде RFC-1123.

$dt_tmp=getdate(date("U")); header("Expires: " . gmdate("D, d M Y H:i:s", date("U")-(86400*($dt_tmp["wday"]-8))) . " GMT"); header("Cache-control: public");

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

Другой подход, который применяется при более оперативном обновлении данных и одновременной большой посещаемости сервера (в другом случае кэширование эффективным не будет) состоит в использовании специального заголовка Cache-control: max-age=секунды, который определяет время, по истечении которого документ уже считается устаревшим и имеющий гораздо больший приоритет при вычислении свежести конкретного документа.

Если Вы публикуете новости с интервалом в 60 минут:

header("Cache-control: public"); header("Cache-control: max-age=3600");

Реализация кэширования на PHP

Вам необходимо создать два специальных файла. Первый будет делать вывод кэша, а второй — создавать кэш.

Начнем с первого файла, который назовем read_cache.php.

 > ob_start(); // Открываем буфер для вывода, если кэша нет, или он устарел ?>

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

Теперь создадим специальный файл write_cache.php. Он будет записывать в файл то, что накопилось в буфере.

Теперь в любом php-файле, который отвечает за вывод, можно включить кэширование:

Теперь вы можете все проблемные странички начать кэшировать. Однако не забывайте, пока кэш живет, пользователь не будет видеть любые обновления. В связи с этим, делайте кэширование на 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, то условие выполнится, контент выведется и сохранится в файле. В другом случаи контент всегда будет выводится из файла кэша.

Источник

Cache PHP Dynamic Pages to Speed Up your Website

PHP Cache Script

How to cache PHP code and how does PHP cache mechanism works? At the end you will learn on how to create a PHP caching mechanism and always serve your website with fast loading pages.

Now you have designed a beautiful eye catching website that users will definitely like. But you see there is no good amount of traffic flowing in, because your website is a dynamic page which is taking lot of time for a server to process, execute, transfer and finally render it in a user’s browser.

PHP Dynamic Page Creation

So, processing time is the main reason for your slow website and that may leave users with bad experience. An ideal recommended Website Load Time should be around 2 to 5 seconds. To achieve that with your dynamic PHP page, we are implementing some sort of caching mechanism on your website to speed up page loading time. So, we can serve fast loading static page using our cache system.

After using PHP Caching System

The simplest way to do is to create cache file of each page of your website and store them in a separate directory, which can later be served as fast loading static pages instead of dynamically generated slow pages.

PHP Caching (Output Buffer + File System):

Now the cache technique we use here is by combining PHP’s Output Buffer and Filesystem. Using them we can have a wonderful caching system and create wonders. The Filesystem and Output Buffer functions are both part of the PHP core. There is no additional installation needed to use these functions. You can see how our caching system works as given below.

Un cached vs Cached Request PHP Caching System Flow Chart

PHP Output Buffer:

Now let us understand how Output Buffer works.

First line ob_start() turns the output buffering on, which means anything after this line will be stored in the buffer

We use ob_get_contents() to retrieve the contents of the output buffer.

We use ob_end_flush() at the end of the code which turns off buffering.

PHP File System:

Here we use filesystem functions to access and manipulate the filesystem.

Very first function we use is fopen to open a file to write content and in the below code ‘w’ is a mode which is used to create a file if it doesn’t exist.

Next we use fwrite to write contents into the file.

And finally we use fclose to close the open file after we finish writing.

Now we will combine both PHP’s Output Buffer and Filesystem to build an exceptional PHP page caching system.

So, now we will create two files, one is start-cache.php and another one is end-cache.php . By the end of this post you will get to know why did we create two files namely start-cache.php and end-cache.php

Cache PHP Code

1. Create the start-cache.php file:

'; ob_end_flush(); //Flush and turn off output buffering exit(); //No need to proceed further, exit the flow. > ob_start('ob_gzhandler'); //Turn on output buffering with gzip compression. ?>

Let me explain what does that above code do. Firstly we create file structure by providing file extension and followed by the expiry time of a cache file and the folder in which the cache file will be saved to or stored.

And the very next step we do is to construct a cache file into cache folder by using URL of the dynamic page you want to cache and implement its file name with md5 hash. So, the cache file we create looks something like this 2e3fe7440b17262a6576b9848d0a10f8.html in the cache folder after successful cache.

Now our script checks for cache file if exists in the cache folder and if the file is not expired. And if it is not expired then that cache file is served to the user and ends the script. Here as our intention is to serve the cache file faster, we are using gzip compression with ‘ob_gzhandler’ which will send entire file in a single request instead of sending bytes of the code one after other which speeds up this entire process.

Next if the cache file does not exist or expired then the code should initiate to create one. To do so, we start the Output buffer with ob_start(‘ob_gzhandler’); and anything after this line in the script will capture your dynamic page contents. And other things after this is handled by end-cache.php file which is given below.

2. Create the end-cache.php file:

 $fp = fopen($cache_file, 'w'); //Open file for writing fwrite($fp, ob_get_contents()); //Write contents of the output buffer in Cache file fclose($fp); //Close file pointer ob_end_flush(); //Flush and turn off output buffering ?>

Now the above script will create a cache folder using filesystem functions if the cache folder doesn’t exist. To create the cache folder the script uses folder name from settings provided at the beginning of the code. Next the script opens cache file to write contents of the dynamic page and if the cache file doesn’t exist we create one with ‘w’ mode in the script. Using fwrite we write contents into the cache file and finally we close that open cache file with fclose and end the output buffer with ob_end_flush();

3. Include created Cache PHP files in your webpage:

Now that you have created two files, you simply have to include them in the page you wish to cache. So, here the files which we made you create are start-cache.php and end-cache.php . During explanation you should have understood that we will include first file at the beginning of the code and the other file at the end of that code. You can see the example of including files in the below code.

You have just finished making a cache script which will now load a slow PHP page incredibly faster.

Sudheer Ankireddypalli is an Entrepreneur, Tech Enthusiast, Hardcore Gamer, Traveler and Geek.

Источник

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