8-02-2013, 01:05 Посмотрели: 3488 Добавил: Alex V

Простой способ кэширования сайта на стороне сервера с помощью PHP


Сейчас мало кто делает сайты на статике и все больше пользователей сети решают делать сайты динамические, пример этому закрытие проекта Narod.ru от поисковой системы Яндекс. Ведь лень сидеть и обновлять сайты через редакторы и блокноты..

Однако динамические сайты создают и большую нагрузку. Ведь статика отображается в браузере и так в том виде в каком она лежит на хостинге. Динамические сайты (те что построены на CMS) перед тем как отобразиться в браузере, посылают запросы к базе данных. Что собственно и создает нагрузку, например на хостинге masterhost при 150 посетителях (которые заходят в течении часа) на блоге WordPress, создают бешенные тормоза и кол-во времени на загрузку страницы может возрасти до минуты. (кто не верит могу скинуть примеры с форумов, когда мне писали об этом читатели)

В чем же суть кеширования?

Все очень просто! Когда пользователь обращается на страницу «site.ru/kak-sdelat-cache-na-sayte.html» [или на любую другую страницу например на страницу о том где можно купить матрицы для ноутбуков, то на сервере создается статический файл этой страницы. И при следущем заходе другого пользователя он получает уже статическую копию страницы. Таким образом можно не только ускорить работу сайта, но и снизить нагрузку на сервер и базу.

В этом уроке мы будем использовать следующие функции:

file_exists() - проверяет наличие указанного файла или каталога.
readfile() - позволяет прочитать данные из файла. Т.е. эта функция будет читать наш статичный файл
ob_start() - включает буферизацию вывода. Т.е. все, что будет происходить после этой функции, будет сохранено в буфер(временное хранилище)
ob_get_contents() - получает содержимое буфера вывода.
ob_end_flush() - отправляет содержимое буфера вывода пользователю (если оно имеется), очищает его и выключает буферизацию вывода.
fopen - открывает файл или URL
fwrite() - записывает содержимое в файл.
fclose() - закрывает файл.

Так же создайте папку на сервере cache или с любым другим названием. Как сделать кеширование на сайте?

1. В самом начале страницы пишем:



<?php
if (file_exists('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache')){  
readfile('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache'); exit();} 
ob_start();
// далее идет любой ваш html-php код
include("includes/bd.php");
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
и т.д. и т.п.
?>


Если скрипт находит файл index_xx_yy.cache, то он его считывает и выводит на экран.

Немного о переменных:

xx - номер страницы
уу - параметр формирующий страницу

2. В самом конце страницы, после тэга «/html» вставляем код:



<?php  $buffer = ob_get_contents();
ob_end_flush(); 
$fp = fopen('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache', 'w'); 
fwrite($fp, $buffer); 
fclose($fp); 


В $buffer мы записываем содержимое буфера, после останавливаем буферизацию и очищаем. И уже потом отрываем файл index_xx_yy.cache, если его нет, то создаем его.

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

3. А как же мне очистить кеш то?



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

unlink ('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache');


После чего файл страницы index_xx_yy.cache будет очистен.

Помните:

Папка с кешем должна быть доступна для записи, для этого заранее на неё установите CHMOD 777 или 755 (в зависимости от вашего хостинга). Если вы поняли этот урок достаточно хорошо, то сможете сделать вывод кеша не только целой страницы, но и определенного блока (например последние публикации).

Спасибо за внимание!
Рубрика записи: PHP

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Юзер панель
Я тебя не знаю!
Зарегистрируйся, либо

войди под своим логином!

Fuck, я забыл свой пароль!

Восстановить данные =0
Новое на сайте
Известная социальная сеть Instagram приступила к тестированию новой...
Недавно, в приложения для Android и iOS социальной сети Twitter была...
Недавно, в Google "Мой бизнес" разработчики добавили новейший способ, как...
Недавно стало известно о том, что соцсеть Facebook по упоминанию в русских...
Недавно, представитель корпорации Google, Джон Мюллер (John Mueller)...
Голосуем

Ваша любимая CMS?


DataLife Engine
WordPress
Joomla
Drupal
LiveStreet
UCOZ
Самопис
Php+Includ
Статика