5 окт


Автор: MSW
Версия DLE: любая
Сайт поддержки: https://0-web.ru/

Дополнительные требования:
- выделенный сервер(хотя может и на хостинге будет работать)
- включенная опция выполнения exec в php

Оптимизация очистки кеша DLE путём переноса функции удаления файлов с команд php на команды системы.

На данный момент очистка кеша в ДЛЕ происходит на функции пхп:
    $fdir = opendir( ENGINE_DIR . '/cache' );
    
    while ( $file = readdir( $fdir ) ) {
        if( $file != '.' and $file != '..' and $file != '.htaccess' and $file != 'system' ) {
            
            if( $cache_area ) {
                
                if( strpos( $file, $cache_area ) !== false ) @unlink( ENGINE_DIR . '/cache/' . $file );
            
            } else {
                
                @unlink( ENGINE_DIR . '/cache/' . $file );
            
            }
        }
    }

из функции видно что читаем содержимое директории, проверяя не является ли файл директорией или другим файлом и т.д. а после удаляем если файл отвечает критериям проверки.

А почему бы для этого не посылая команду серверу?
Он то сделает это быстрее и не надо делать отсеивания на директории, ведь можно указать с каким расширением удалять файлы!

Решение:
Файл: /engine/modules/functions.php
Найти функцию очистки кеша:
function clear_cache($cache_area = false) {

    $fdir = opendir( ENGINE_DIR . '/cache' );
    
    while ( $file = readdir( $fdir ) ) {
        if( $file != '.' and $file != '..' and $file != '.htaccess' and $file != 'system' ) {
            
            if( $cache_area ) {
                
                if( strpos( $file, $cache_area ) !== false ) @unlink( ENGINE_DIR . '/cache/' . $file );
            
            } else {
                
                @unlink( ENGINE_DIR . '/cache/' . $file );
            
            }
        }
    }
}


Заменить на новую:
#****** Оптимизация от MSW ******#
function clear_cache($cache_area = false) {
    if( $cache_area ) {
        exec("rm ".ENGINE_DIR."/cache/{$cache_area}*.tmp");
    } else {
        exec("rm ".ENGINE_DIR."/cache/*.tmp");
    }
}
#****** Оптимизация от MSW ******#


Проверяем: заходим в админку и жмём - очистить кеш, если размер кеша теперь 0 - значит всё работает!
Если не 0 - то в новой функции нужно заменить:
".ENGINE_DIR."

на полный путь к папке енжин, например: /var/www/my_site/engine/

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.