Полный статический кеш для DLE
Название: | Файловыq кеш DLE |
Версия: | 1.0 |
Дата выпуска: | 28.09.2020 года |
Версия DLE: | 13 < |
Автор: | rullan |
В ходе сравнения DLE и Wordpress выяснилось, что наш любимый ДЛЕ не делает полный статический кеш - это как бы и правильно для новостных движков. Но что если на длешке сделан сайт каталог или визитка и правки туда вносятся максимум 1 раз на месяц.
А мне нужно было сделать полную статику, поэтому поискав во всемогущем Интернете нашел способ сделать полное файловое кеширование для DLE. Даный способ подходит для всех версий ДЛЕ включая и 14.1.
ПОГНАЛИ:
1. В папке /engine/cache/ создаем папку fcache и ставим на нее права 777, + сюда бросаем файлик .htaccess с папки /engine/cache/system
2. Вручную, через плагины не получится, в корневом файле:
Открываем файл index.php
Находим:
define ( 'DATALIFEENGINE', true );
и выше вставляем:
////Файловое кеширование///////
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
{
$fcache = $_SERVER['DOCUMENT_ROOT'] . '/engine/cache/fcache/' . md5( $_SERVER['REQUEST_URI'] ) . '.html';
if ( file_exists( $fcache ) && filemtime( $fcache ) > time() - 3600*3 ) exit( file_get_contents( $fcache ) );
}
////
*3600*3 - означает что время жизни кеша 3 часа. По истечении которого кеш будет перезаписан.
2. В файле - engine/modules/main.php (Можно уже через плагин - прикрепил ниже)
Находим:
GzipOut();
Вставляем выше:
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
file_put_contents( $fcache, ob_get_contents() );
ГОТОВО!
Теперь у вас в папке /engine/cache/fcache/ будет накапливаться кеш при каждом посещени сайта незарегестрированным юзером, а вот дл тех хто авторизируется будет обычный кеш ДЛЕ!
И ПОМНИТЕ! после каждой правки на сайте нужно будет вручную оудалять файлы с папки /engine/cache/fcache/
Также можно сделать автоматическую очистку.
Но, для того чтобы кеш редкооткрываемых страниц не копился и не забивал вам диск, создаем следующий скрипт в корне сайта и ставим в кроне на выполнение его каждые 12 часов например.
Например файл clear.php
<?php
$cache_time = 3600*3+60; // время жизни кеша + 60 секунд.
$dir = "/var/www/username/data/www/site.ru/engine/cache/fcache/"; // абсолютный путь до папки с кешем
echo "site.ru: "; // домен вашего сайта
//==========================Очистка устаревшего файлового кэша============//
$del = 0;
$fdir = opendir( $dir );
while( ( $file = readdir( $fdir ) ) !== false )
{
$filetype = explode( '.', $file );
$type = array_pop( $filetype );
$fcache = $dir . $file;
if ( $type == 'html' AND file_exists( $fcache ) AND filemtime( $fcache ) < time() - $cache_time )
{
$del++;
unlink( $fcache );
}
}
closedir( $fdir );
echo $del . " files deleted \n\r";
//========================================================================//
?>