Кэширование в php, пример
Хочу немного рассказать начинающим программистам и вебмастерам о нужности, важности и несомненной полезности такого механизма как кэширование страниц в PHP. Большинство начинающих вебмастеров (или веб программистов), при написании какого либо скрипта сталкиваются с большой кучей сложностей. И для их решения тратят немало времени, в таких условиях не приходится думать об излишествах, к которым также относят и кэширование страниц. Думая при этом — «мол зачем, и так все сойдет, ведь скрипт работает, страницу отображаются», и думают так, почем зря.Кэширование страниц не обходимо как правило большинству скриптов, систем, сайтов как правило которые имеют сравнительно большую посещаемость. Т.к. при каждом посещении пользователем страницу, серверу приходится генерировать ее заново, выполнять зачастую огромный php сценарий и обрабатывать уйму mySQL запросов. Что несомненно приводит к излишним затратам ресурсов сервера (нагрузка CPU, использование памяти). В результате чего система начинает работать очень медленно, а в некоторых случаях и вообще подвисать выдавая ошибку.
Кэширование решает такие проблемы, и по возможности желательно встраивать эту возможность во все ваши проекты которые ориентированы на большую или даже среднюю (1000-3000 уников в сутки) посещаемость.
Принцип работы довольна таки прост, во время генерации страницы, все её содержимое записывается в буфер, после чего отдается пользователю, и записывается на жесткий диск в виде простого файла содержащего статичный HTML код. После чего буфер очищается. При повторной загрузки страницы, она заново уже не генерируется, а просто берется готовый ранее сгенерированный её вариант из файла и отдается пользователю.
Что требует значительно меньше ресурсов сервера, не загружает память, и не грузит лишний раз SQL сервер.
Пример простого кэширования:
1. Создадим папку в корне вашего проекта и назавем ее /cache
2. Для безопасности, чтобы не кто посторонний кроме нашего скрипта не мог лазить в эту папку добавим в неё файл .htaccess, со следующим содержимым
Order Allow,Deny
Deny from all |
3. теперь переходим к самому кэшированию страницы, для этого в начале вставляем следующий PHP код
<? $url=$GLOBALS['REQUEST_URI']; $crc=md5($url); $modif=time()-@filemtime ("cache/$crc"); if ($modif<600) { include ("cache/$crc"); exit(); } ob_start (); ?> |
Этот код работает достаточно просто, сначалы мы генерируем MD5 хеш сумму, на основе полученного нами из переменной $GLOBALS['REQUEST_URI'] текущего адреса страницы. Полученный хеш мы будем использовать для обозначения имени файла, в котором будет хранится кэш данной страницы. Что очень удобно.
Затем в переменную <code>$modif
мы сохраняем время последнего изменения файла, и после сверяем его с заданным значением. Если время хранения меньше 600 (10 мин), то значит что кэш еще свежий, и мы просто выводим его пользователю используя include ("cache/$crc");
В противном случае запускаем буферизацию командой ob_start ();
После чего в самом низу страницы вставляем код: <p>0110e709c999d23ce28318d36bbd8741005</p> Этот код при его разборе тоже достаточно прост. Получаем содержимое буфера командой <code>ob_get_contents();
и ложим его в переменную $cache
, в буфере как понимаете у нас будет хранится вся страница целиком, в виде простого HTML кода. После чего очищаем буфер, дабы не забивать память сервера — ob_end_clean ();
. И на конец выводим все содержимое из переменной $cache в браузер пользователя.
На последок остается только сохранить все содержимое переменной $cache в файл с названием состоящим из хеша урла текущей страницы. Что мы собственно и делаем.
Для удобства стоит также реализовать в данном примере возможность отключить кэширование тогда когда это нужно.
Замечу, используя кэширование в своих проектах вы можете увеличить скорость работы всего сайта в десятки раз. Кэшированные страницы грузятся значительно быстрее.
П.С, В следующих постах расскажу как использовать готовый (удобный и гибкий) класс zend_cache для кэширования страниц.
Похожие записи
7 комментариев to “Кэширование в php, пример”
Оставить комментарий
Full Stack
Senior, Architect
предложить оффер
- jQuery: как получить значение атрибута?
- PHP работа с изображением, класс SimpleImage
- Интеграция с API ОСАГО сайта sravni.ru
- Комментарии на PHP, Ajax, mySQL
- PHP: Категории бесконечного уровня вложенности.
- Nginx редирект на другой сервис с сохранением URL спросил (а) Сергей
- Исполнитель пропал, почему такое случается и понять с кем работать? спросил (а) Артем
- Можно ли WordPress считать универсальным движком? спросил (а) Андрей
- Что такое самописный скрипт или CMS? спросил (а) Антон
- Как при поиске в linux используя grep, добавить исключения? спросил (а) Алексей
- Обзор Insurance CMS — платформы для сайтов по страхованию к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Как создать Telegram-бота с авторизацией через сайт к записи
- PHP скрипт: каталог закладок на сайты к записи
- Валидация на PHP к записи
- Сколько зарабатывают в бизнесе на совместных покупках к записи
Archive
- +2025 (7)
- Февраль 2025 (1)
- Январь 2025 (6)
- +2024 (35)
- Декабрь 2024 (7)
- Ноябрь 2024 (13)
- Октябрь 2024 (8)
- Сентябрь 2024 (1)
- Август 2024 (5)
- Май 2024 (1)
- +2023 (27)
- Ноябрь 2023 (1)
- Октябрь 2023 (13)
- Сентябрь 2023 (10)
- Апрель 2023 (1)
- Март 2023 (1)
- Февраль 2023 (1)
- +2022 (21)
- Декабрь 2022 (11)
- Ноябрь 2022 (1)
- Май 2022 (2)
- Апрель 2022 (2)
- Март 2022 (3)
- Февраль 2022 (1)
- Январь 2022 (1)
- +2021 (17)
- Декабрь 2021 (5)
- Ноябрь 2021 (2)
- Июль 2021 (1)
- Июнь 2021 (2)
- Май 2021 (5)
- Апрель 2021 (1)
- Март 2021 (1)
- +2020 (20)
- Декабрь 2020 (6)
- Сентябрь 2020 (2)
- Август 2020 (1)
- Июль 2020 (2)
- Май 2020 (2)
- Апрель 2020 (2)
- Март 2020 (2)
- Февраль 2020 (1)
- Январь 2020 (2)
- +2019 (18)
- Декабрь 2019 (3)
- Ноябрь 2019 (2)
- Октябрь 2019 (2)
- Сентябрь 2019 (1)
- Август 2019 (2)
- Июль 2019 (1)
- Июнь 2019 (1)
- Апрель 2019 (2)
- Март 2019 (1)
- Февраль 2019 (3)
- +2018 (44)
- Декабрь 2018 (4)
- Ноябрь 2018 (7)
- Октябрь 2018 (8)
- Сентябрь 2018 (1)
- Август 2018 (4)
- Июль 2018 (5)
- Май 2018 (3)
- Апрель 2018 (7)
- Март 2018 (1)
- Февраль 2018 (2)
- Январь 2018 (2)
- +2017 (19)
- Декабрь 2017 (2)
- Ноябрь 2017 (1)
- Октябрь 2017 (1)
- Сентябрь 2017 (2)
- Июль 2017 (1)
- Июнь 2017 (1)
- Май 2017 (2)
- Апрель 2017 (3)
- Март 2017 (2)
- Февраль 2017 (1)
- Январь 2017 (3)
- +2016 (36)
- Декабрь 2016 (3)
- Ноябрь 2016 (3)
- Октябрь 2016 (2)
- Сентябрь 2016 (3)
- Август 2016 (7)
- Июнь 2016 (3)
- Май 2016 (3)
- Апрель 2016 (3)
- Февраль 2016 (1)
- Январь 2016 (8)
- +2015 (36)
- Ноябрь 2015 (5)
- Октябрь 2015 (4)
- Сентябрь 2015 (1)
- Август 2015 (8)
- Июнь 2015 (1)
- Май 2015 (4)
- Апрель 2015 (8)
- Март 2015 (3)
- Февраль 2015 (2)
- +2014 (26)
- Ноябрь 2014 (2)
- Октябрь 2014 (5)
- Сентябрь 2014 (6)
- Июль 2014 (1)
- Июнь 2014 (2)
- Май 2014 (3)
- Апрель 2014 (6)
- Февраль 2014 (1)
- +2013 (27)
- Декабрь 2013 (2)
- Ноябрь 2013 (1)
- Октябрь 2013 (1)
- Август 2013 (1)
- Июль 2013 (3)
- Июнь 2013 (10)
- Май 2013 (1)
- Апрель 2013 (2)
- Февраль 2013 (3)
- Январь 2013 (3)
- +2012 (41)
- Декабрь 2012 (2)
- Ноябрь 2012 (3)
- Октябрь 2012 (7)
- Сентябрь 2012 (2)
- Август 2012 (1)
- Июль 2012 (3)
- Июнь 2012 (2)
- Май 2012 (6)
- Апрель 2012 (2)
- Март 2012 (7)
- Февраль 2012 (5)
- Январь 2012 (1)
- +2011 (57)
- Декабрь 2011 (6)
- Ноябрь 2011 (2)
- Октябрь 2011 (3)
- Сентябрь 2011 (5)
- Август 2011 (4)
- Июль 2011 (3)
- Июнь 2011 (3)
- Май 2011 (3)
- Апрель 2011 (4)
- Март 2011 (10)
- Февраль 2011 (5)
- Январь 2011 (9)
- +2010 (43)
- Декабрь 2010 (7)
- Ноябрь 2010 (21)
- Октябрь 2010 (14)
- Сентябрь 2010 (1)
Свежие записи
- Подключение к API Пауэр Интернэшнл-шины (ПИШ, 4tochki) 06.02.2025
- Использование API геокодера от LocationIQ на сайте 30.01.2025
- Проверка доступности домена онлайн 29.01.2025
- Форматирование CSS кода 29.01.2025
- Плагин WordPress для настройки robots.txt 13.01.2025
Всё тот же вопрос..-нет ли подобного скрипта для вставки в шаблон php а не в корень сайта?Если есть-будьте добры-выложите сам скрипт.Думаю многие будут благодарны в том числе и я!
Собственно представленный скрипт, можно вставить в любое места вашего скрипта. Нет необходимости вставлять его в корень.
Не понял…Тоесть эти коды вставить в html-шаблон и всё?А разве не нужно что-то типа
код
не пробивает начало и конец закрытия скрипта..script type=»text/javascript» код /script -типо этого..
это код примера на PHP, его нужно вставлять в скрипт (с расширением .PHP)
Роман-ссори,но я не в курсе какое расширение пхп..Если не трудно-выложите код,чтобы я просто вставил правильный скрипт в шаблон..
шикарно и просто никогда не задумывался об это и не встречал.
Хочу добавить, по сути любая страница набор статических и динамических блоков, дак вот применять этот механизм непосредственно к статичным блокам дающим нагрузку на сервер (><)