Динамические страницы формируются при вызове один (за время жизни кэша) раз и записываются в статичный файл формата html
. При каждом запросе (в течение жизни кэша) выдается результат из файла. Ускоряет загрузку сайта (страниц) и снижает нагрузку на сервер и базу данных.
- В зависимости от режима обновления кэшируемых страниц нужно выставить оптимальное время устаревания кэша и его обновления.
- Папку с файлами кэша лучше разместить за пределами публичной части сайта
- Интерактивные серверные элементы (формы почты, комментарии и проч.) в кэшируемых страницах работать не будут, поэтому уделить внимание оптимальному выбору контента для кэширования
Пример использования:
В начало скрипта, генерирующего страницы сайта:<?php
// раздел настроек, которые вы можете менять
$cachedir = $_SERVER['DOCUMENT_ROOT'].'/cache/';
$cachetime = 3600; //время жизни кэша (1 час)
$thispage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$cachelink = $cachedir.md5($thispage).".html";
if (file_exists($cachelink)) {
$cachelink_time = filemtime($cachelink);
// если кэш еще не устарел, читаем страницу из файла и отдаем браузеру
if ((time() - $cachetime) < $cachelink_time) {
readfile($cachelink);
die();
}
}
ob_start();
?>
В конце скрипта:
<?php
$fp = fopen($cachelink, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
?>
Все страницы сайта будут кэшироваться на 3600 секунд. Кэш страниц будет сохранен в папке cache
.
Использованные функции:
void ob_start()
Эта функция включает буферизацию вывода. Если буферизация вывода активна, никакой вывод скрипта не высылается (кроме headers
); вывод сохраняется во внутреннем буфере. Содержимое этого внутреннего буфера может быть скопировано в строковую переменную с использованием ob_get_contents()
. Для вывода содержимого этого внутреннего буфера используйте ob_end_flush()
. Альтернативно ob_end_clean()
втихую отбрасывает содержимое буфера.
string ob_get_contents()
Возвращает содержимое буфера вывода или FALSE
, если буферизация вывода неактивна.
void ob_end_flush()
Эта функция отправляет содержимое буфера вывода (если оно имеется) и выключает буферизацию вывода. Если вы хотите в дальнейшем обработать содержимое буфера, вы должны вызвать ob_get_contents()
до ob_end_flush()
, так как содержимое буфера выбрасывается после вызова ob_end_flush()
.
Комментарии:
Гудвин Гадкий_Я©™#
Этот скрипт на вордпресс будет работать?есть замечания какие нибудь по этому поводу?
coder.hol.es /* Админ */#
Увы, в этом подсказать не получится.
ВАся пупкин#
Блин долго искал для file get content ….. помогло!!!!!!
coder hol es#
)Хорошо, рад)