😎 » DARYA DLE » Плагины DLE » Полный статический кеш для DLE
1 298 5  

Полный статический кеш для DLE

Название: Файловыq кеш DLE
Версия: 1.0
Дата выпуска: 28.09.2020 года
Версия DLE: 13 <
Автор: rullan

В ходе сравнения DLE и Wordpress выяснилось, что наш любимый ДЛЕ не делает полный статический кеш - это как бы и правильно для новостных движков. Но что если на длешке сделан сайт каталог или визитка и правки туда вносятся максимум 1 раз на месяц.

А мне нужно было сделать полную статику, поэтому поискав во всемогущем Интернете нашел способ сделать полное файловое кеширование для DLE. Даный способ подходит для всех версий ДЛЕ включая и 14.1.


tongue ПОГНАЛИ:

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/ будет накапливаться кеш при каждом посещени сайта незарегестрированным юзером, а вот дл тех хто авторизируется будет обычный кеш ДЛЕ!


belay am И ПОМНИТЕ!  после каждой правки на сайте нужно будет вручную оудалять файлы с папки /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";
//========================================================================//
?>

Коментарі 5

25 січня 2021 20:24

Здравствуйте, ваш код работает (версия Dle 13.2). Но если на странице есть всплывающая форма для отправки жалобы на текст этой страницы, то форма данные не отправляет при данном способе кеширования. Как можно обойти данную проблему?


27 січня 2021 02:12

what ДОлжно работать - Проверяйте на локальном сервере сначала


27 січня 2021 16:13
Цитата: admin

what ДОлжно работать - Проверяйте на локальном сервере сначала

Кеширование работает на ура (за это респект вам), только вот некоторые интерактивные элементы страницы, например оценка (рейтинг) статьи уже правильно не работают, при попытки выставления рейтинга пишет "Ваша пользовательская сессия истекла, перезагрузите страницу в браузере и при необходимости войдите на сайт повторно." Можно как то решить вопрос с такими элементами?


28 січня 2021 01:56
Цитата: Илья

Кеширование работает на ура (за это респект вам), только вот некоторые интерактивные элементы страницы, например оценка (рейтинг) статьи уже правильно не работают, при попытки выставления рейтинга пишет "Ваша пользовательская сессия истекла, перезагрузите страницу в браузере и при необходимости войдите на сайт повторно." Можно как то решить вопрос с такими элементами?

bully Тут я Вам не помогу... Мои знания в кеше и PHP минимальные... Я себе делал кеш для 1 сайта (https://ukr-site.org.ua/) - там все гуд... Может попробуйте в другом браузере....


9 березня 2021 11:16

Кто знает как массово сгенерировать кэш для всех страниц?


Залишити свій коментар:

Досвід у веброзробці:

2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2009
2023