<MyRusakov.ru />

Создание Интернет-магазина на PHP и MySQL

Создание Интернет-магазина на PHP и MySQL

Видеокурс "Создание Интернет-магазина на PHP и MySQL" - это уникальный курс по созданию Интернет-магазина с нуля. Особенностью данного курса является то, что создание идёт с самого начала, то есть от идеи. Далее создаётся дизайн всех необходимых страниц, после делается их вёрстка. Затем создаётся движок на PHP и MySQL, после делается Admin-панель и, наконец, готовый сайт размещается в Интернете.

Адрес созданного в этом курсе сайта: http://storedvd.ru

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

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

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

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

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

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

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

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

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

<?php
  $cache_time = 300; // Время жизни кэша в секундах
  $file = strrchr($_SERVER["SCRIPT_NAME"], "/");// Получаем название файла
  $file = substr($file, 1); // Удаляем слеш
  $cache_file = "/cache/$file.html"; // Файл будет находиться, например, в /cache/a.php.html
  if (file_exists($cache_file)) {
    // Если файл с кэшем существует
    if ((time() - $cache_time) < filemtime($cache_file)) {
      // Если его время жизни ещё не прошло
      echo file_get_contents($cache_file); // Выводим содержимое файла
      exit; // Завершаем скрипт, чтобы сэкономить время на дальнейшей обработке
    }
  }
  ob_start(); // Открываем буфер для вывода, если кэша нет, или он устарел
?>

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

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

<?php
  $handle = fopen($cache_file, 'w'); // Открываем файл для записи и стираем его содержимое
  fwrite($handle, ob_get_contents()); // Сохраняем всё содержимое буфера в файл
  fclose($handle); // Закрываем файл
  ob_end_flush(); // Выводим страницу в браузере
?>

И теперь в любом PHP-файле на сайте, отвечающем за вывод страницы, можно включить кэширование следующим образом:

<?php
  require_once "read_cache.php"; // Пытаемся вывести содержимое кэша
  // Здесь идёт обычная генерация страницы
  require_once "write_cache.php"; // Здесь идёт сохранение сгенерированной страницы в кэш
?>

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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (15):

malina95 malina95 14.10.2012 15:20:45

Я пробовал такое сделать но получилось криво...Когда пользователь входит на сайт то через секунд 30 появляються опять инпуты для входа, и пишется типа он вошёл "Здравствуйте, Admin"...я так понимаю что такое нужно делать только для крупных проектов...???

Ответить

Admin Admin 14.10.2012 21:38:02

Да, это только если сервер не успевает всё быстро обрабатывать.

Ответить

malina95 malina95 14.10.2012 21:50:00

Понятно...

Ответить

brussens brussens 17.10.2012 01:06:13

можно например кэшировать куски страниц, как это реализовано в yii. так же поможет apc или eAccelerator

Ответить

alikhanov_k@mail.ru alikhanov_k@mail.ru 03.05.2013 14:56:44

Здравствуйте! А как сделать кэширование для страниц типа example.com/index.php?s=7

Ответить

Admin Admin 03.05.2013 17:25:23

Аналогично, только названия файлов нужно будет разные делать, например, file-7.html.

Ответить

bzpsr bzpsr 13.06.2013 00:25:27

Как быть с кэшированием, для вывода товаров в интернет магазине, если нужно проверять дополнительно на наличие товара в корзине???

Ответить

Admin Admin 13.06.2013 10:40:49

Такие страницы либо вообще не кэшируются, либо кэшируются на несколько минут.

Ответить

bzpsr bzpsr 13.06.2013 18:49:13

Ну кэшировать хоть даже на несколько минут страницу с $_Session вобще нет. Может есть какое-то решение? Например не проверять на наличие в корзине - это выход?

Ответить

Admin Admin 13.06.2013 18:58:04

Единственное решение - не кэшировать данную страницу вообще.

Ответить

bzpsr bzpsr 13.06.2013 19:01:48

Нет не страницу. Блок где выводятся товары со своими переменными, просто не проверять добавил ли посетитель товар или нет. Ведь такой блок всегда (почти всегда) имеет одни и те же значения

Ответить

Admin Admin 13.06.2013 19:45:45

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

Ответить

bzpsr bzpsr 13.06.2013 20:12:05

Так это актуально?

Ответить

Admin Admin 13.06.2013 21:26:19

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

Ответить

kyp4ak kyp4ak 15.03.2016 10:20:34

Как можно очистить кэши с помощью php?

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.