php Скрипт кэширования сайта 

Дата публикации  Дата изменения25.01.15  Комментарии2   Просмотры1437

Динамические страницы формируются при вызове один (за время жизни кэша) раз и записываются в статичный файл формата 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().

Бесплатные курсы

Категории

Теги: , , , , , ,

Оцените материал:

Рейтинг: 0.0/10 (0)


КомментарииКомментарии:

    Гудвин Гадкий_Я©™

     

    Этот скрипт на вордпресс будет работать?есть замечания какие нибудь по этому поводу?

    coder.hol.es /* Админ */

     

    Увы, в этом подсказать не получится.


Поля, обозначенные как *, обязательны.





Максимальная длина сообщения 900 символов. Осталось   символов

 

Старые →← Новые