23 янв


Автор: MSW
Версия DLE: 9.0-9.2 (поидее все версии)
Сайт поддержки: https://0-web.ru/

Хак заменяющий стандартное файловое кеширование на кеширование MemCache.
Соответственно на сервере/хостинге должна быть поддержка MemCache и в настройках выставлено достаточное кол-во памяти.
Предварительный размер памяти который понадобится выделить можно посмотреть в админке DLE пункт Общий размер кеша.

Файл: /engine/modules/functions.php
Найти:
function dle_cache($prefix, $cache_id = false, $member_prefix = false) {
global $config, $is_logged, $member_id;

if( $config['allow_cache'] != "yes" ) return false;

if( $is_logged ) $end_file = $member_id['user_group'];
else $end_file = "0";

if( ! $cache_id ) {

$filename = ENGINE_DIR . '/cache/' . $prefix . '.tmp';

} else {

$cache_id = md5( $cache_id );

if( $member_prefix ) $filename = ENGINE_DIR . "/cache/" . $prefix . "_" . $cache_id . "_" . $end_file . ".tmp";
else $filename = ENGINE_DIR . "/cache/" . $prefix . "_" . $cache_id . ".tmp";

}

return @file_get_contents( $filename );
}

function create_cache($prefix, $cache_text, $cache_id = false, $member_prefix = false) {
global $config, $is_logged, $member_id;

if( $config['allow_cache'] != "yes" ) return false;

if( $is_logged ) $end_file = $member_id['user_group'];
else $end_file = "0";

if( ! $cache_id ) {
$filename = ENGINE_DIR . '/cache/' . $prefix . '.tmp';
} else {
$cache_id = md5( $cache_id );

if( $member_prefix ) $filename = ENGINE_DIR . "/cache/" . $prefix . "_" . $cache_id . "_" . $end_file . ".tmp";
else $filename = ENGINE_DIR . "/cache/" . $prefix . "_" . $cache_id . ".tmp";

}

$fp = fopen( $filename, 'wb+' );
fwrite( $fp, $cache_text );
fclose( $fp );

@chmod( $filename, 0666 );

}

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 );

}
}
}
}

Заменить на:
function dle_cache($prefix, $cache_id = false, $member_prefix = false) {
global $config, $is_logged, $member_id;

if( $config['allow_cache'] != "yes" ) return false;

if( $is_logged ) $end_file = $member_id['user_group'];
else $end_file = "0";
//****** Memcache by MSW *** start ******//
$memcache = new Memcache;
$memcache->connect('localhost', 11211);
if( ! $cache_id ) {
$filename = $prefix;
} else {
$cache_id = md5( $cache_id );
if( $member_prefix ) $filename = $prefix."_".$cache_id."_".$end_file;
else $filename = $prefix."_".$cache_id;
}
return $memcache->get($filename);
$memcache->close();
//****** Memcache by MSW *** stop ******//
}

function create_cache($prefix, $cache_text, $cache_id = false, $member_prefix = false) {
global $config, $is_logged, $member_id;

if( $config['allow_cache'] != "yes" ) return false;

if( $is_logged ) $end_file = $member_id['user_group'];
else $end_file = "0";
//****** Memcache by MSW *** start ******//
$memcache = new Memcache;
$memcache->connect('localhost', 11211);
if( ! $cache_id ) {
$filename = $prefix;
} else {
$cache_id = md5( $cache_id );
if( $member_prefix ) $filename = $prefix."_".$cache_id."_".$end_file;
else $filename = $prefix."_".$cache_id;
}
$memcache->set($filename, $cache_text);
$memcache->close();
//****** Memcache by MSW *** stop ******//
}

function clear_cache($cache_area = false) {
//****** Memcache by MSW *** start ******//
if( $cache_area ) {
$memcache = new Memcache;
$memcache->connect('localhost', 11211);
$memcache->set($cache_area, "");
$memcache->close();
} else {
$s = @fsockopen('localhost','11211');
fwrite($s, 'flush_all'."\r\n");
$buf='';
while ((!feof($s))) {
$buf .= fgets($s, 256);
if (strpos($buf,"OK\r\n")!==false){ // flush_all says ok
break;
}
}
fclose($s);
}
//****** Memcache by MSW *** stop ******//
}


*** Изменена функция очистки кеша ***

Внимание! Данная система на данный момент не является полноценно рабочей! Не происходит коректное удаление кеша!

Для контроля того что твориться у нас в мемкеше рекомендую использовать скрипт:
72
7.78 Kb
memcache.zip
Загружен: 23-01-2011, 01:34 / MD5: 19665dac3cd77835fa090608ec1be500

DLE MemCache v1.1

Предварительно рекомендую сменить логин и пароль для входа. В этом скрипте в строках:
define('ADMIN_USERNAME','memcache');     // Admin Username
define('ADMIN_PASSWORD','password'); // Admin Password

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