Мы в твиттере Мы в телеграме!

Провеббер » DataLife Engine » Альтернатива файловому кешу, APC (Advanced PHP Cache)

Набор в команду! Ведется набор в команду, для наполнения сайта новым, интересным контентом. Если у тебя есть предложения, свободное время, ты обладаешь интересным контентом, и хочешь поделиться с другими?
Обращайся к нам в ЛС группы Вконтакте.

Альтернатива файловому кешу, APC (Advanced PHP Cache)

Данный материал предоставлен сайтом ProWebber.cc исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Скачать бесплатно Альтернатива файловому кешу, APC (Advanced PHP Cache).

Описание: Данных хак заменяет систему кэширования DLE на более мощную и продвинутую APC
Автор: сущность

Конфиг PHP модуля:
extension=apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=256M; 256
apc.ttl=180
apc.user_ttl=120
apc.gc_ttl=120
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.rfc1867=1
apc.localcache=1
apc.file_update_protection=30
apc.include_once_override=1
apc.stat_ctime=1
apc.slam_defense=Off
;apc.lazy_classes=1
;apc.lazy_functions=1


установить желательно из СВН (Linux, FreeBSD, etc..):
svn co 'http://svn.php.net/repository/pecl/apc/trunk/' 'pecl-apc'
# whereis php-config
php-config: /usr/local/bin/php-config
./configure --enable-apc --enable-apc-mmap --with-php-config='/usr/local/bin/php-config'


Начинаем установку хака

1. Открыть файл engine/init.php

- найти
require_once ENGINE_DIR . '/modules/gzip.php';


- добавить
require_once ENGINE_DIR . '/classes/APC.php'; // Advanced PHP byte code cached


$apc_cache = new cache_apc();

2. Открыть файл engine/modules/functions.php

Найти
function set_vars($file, $data) {
    
    $fp = fopen( ENGINE_DIR . '/cache/system/' . $file . '.php', 'wb+' );
    fwrite( $fp, serialize( $data ) );
    fclose( $fp );
    
    @chmod( ENGINE_DIR . '/cache/system/' . $file . '.php', 0666 );
}


заменить на

function set_vars($file, $data) {
    global $apc_cache;

    $apc_cache->set($file, $data);
}


найти
function get_vars($file) {
    
    return unserialize( @file_get_contents( ENGINE_DIR . '/cache/system/' . $file . '.php' ) );
}


заменить на
function get_vars($file) {
    global $apc_cache;

    return $apc_cache->get($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";
    
    if( ! $cache_id ) {
        
        $filename = ENGINE_DIR . '/cache/' . $prefix . '.tmp';
    
    } else {
        
        $cache_id = totranslit( $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 dle_cache($prefix, $cache_id = false, $member_prefix = false) {
    global $config, $is_logged, $member_id, $apc_cache;
    
    if( $config['allow_cache'] != "yes" ) return false;
    
    if( $is_logged ) $end_file = $member_id['user_group'];
    else $end_file = "0";
    
    if( ! $cache_id ) {
        $filename = $prefix;
    } else {
        $cache_id = totranslit( $cache_id );

        if( $member_prefix ) $filename = $prefix . "_" . $cache_id . "_" . $end_file;
        else $filename = $prefix . "_" . $cache_id;
    }
    return $apc_cache->get( $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 = totranslit( $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 create_cache($prefix, $cache_text, $cache_id = false, $member_prefix = false) {
    global $config, $is_logged, $member_id,    $apc_cache;
    
    if( $config['allow_cache'] != "yes" ) return false;
    
    if( $is_logged ) $end_file = $member_id['user_group'];
    else $end_file = "0";
    
    if( ! $cache_id ) {
        $filename = $prefix;
    } else {
        $cache_id = totranslit( $cache_id );

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

    $apc_cache->set($filename, $cache_text);
}


найти
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 clear_cache($cache_area = false) {
    global $apc_cache;

    $apc_cache->clear_cache();
}


Содержание файла engineclassesAPC.php
<?php
/*
=====================================================
DataLife Engine Advanced PHP Cache [mode] =:)
Coded by Pandora aka Denis
=====================================================
*/

if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}

class cache_apc
{
    //var $used = true;

    function cache_apc ()
    {
        if (!$this->is_installed())
        {
            die('Error: APC extension not installed');
        }
    }

    // Fetch a stored variable from the cache
    function get ($name)
    {
        return apc_fetch($name);
    }

    //  Cache a variable in the data store
    function set ($name, $value, $ttl = 0)
    {
        return apc_store($name, $value, $ttl);
    }

    // Removes a stored variable from the cache
    function rm ($name)
    {
        return apc_delete($name);
    }
    
    // Clears the APC cache
    function clear_cache ($cache_type = NULL)
    {
        return apc_clear_cache($cache_type);
    }
    
    // Retrieves APC's Shared Memory Allocation information
    function sma_info($limited = false)
    {
        return apc_sma_info($limited);
    }

    // Defines a set of constants for retrieval and mass-definition
    function save_constants($key, $constants, $case_sensitive = true)
    {
        return apc_define_constants($key, $constants, $case_sensitive);
    }

    // Loads a set of constants from the cache
    function load_constants($key, $case_sensitive = true)
    {
        return apc_load_constants($key, $case_sensitive);
    }

    function is_installed ()
    {
        return function_exists('apc_fetch');
    }
}


P.S. Взято с 4dle.ru и если что то испортиться то я ответственности не несу ))


Дополнительные ссылки на скачивание ТОЛЬКО для зарегистрированных


0
Просмотры: 16 304 :: Комментарии (7) :: :: Нужна помощь? Задайте вопрос на форуме ::
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#15Nizza

  • 2 марта 2010 12:31
  • Регистрация: 22.09.2009
  • Был(а) онлайн: 5.10.2024
  • Комментариев: 343
  • 0
rofl rofl если что-то испортится )) порадовало )) а в общем будет время будем тестить ... интересная вещице думаю

#2Dark Angell

  • 2 марта 2010 12:59
  • Регистрация: 9.10.2009
  • Был(а) онлайн: 16.09.2024
  • Комментариев: 310
  • 0
ха,в 8.5 по коду посмотрел там улучшенное кеширование,тоесть то что выложено улучшено в десятки раз biggrin

#3WooW

  • 3 марта 2010 08:55
  • Регистрация: 22.10.2009
  • Был(а) онлайн: 14.08.2024
  • Комментариев: 510
  • 0
laugh А толку от всего этого О_о!?

#4BR0kEN

  • 3 марта 2010 12:48
  • Регистрация: 29.11.2009
  • Был(а) онлайн: 30.11.2013
  • Комментариев: 255
  • 0
WooW, сначала задайся вопросом: зачем нужно кеширование? Потом стает ясно что оно влияет на производительность твоего двига. Это как с процессором, при обращении его к определенной ячейке оперативной памяти, в кеш переносится блок значений адресов определенного размера, идущих следом за этой ячейкой.
Просто учитывая линейное расположение данных в памяти, и то, что скорее всего следующая запрошенная ячейка окажется недалеко от предыдущей.
И при следующем запросе, данные будут браться уже не из оперативки, а из кеша.
Соответственно, скорость чтения из кеш памяти, которая расположена внутри процессора, и работает на частоте ядра, значительно выше.

Проще говоря, чем лучше система кеширования данных, тем лучше работает сайт smile

--------------------

#5mumd94

  • 3 марта 2010 15:51
  • Регистрация: 2.12.2009
  • Был(а) онлайн: 26.08.2014
  • Комментариев: 28
  • 0
ну че люди кто ниб ставил, работает или нет, производительность увеличилась?

--------------------

#6midlersen

  • 9 мая 2011 20:52
  • Регистрация: 9.10.2010
  • Был(а) онлайн: 30.05.2019
  • Комментариев: 63
  • 0
kep, если использовать хостинг за 10 рублей то кеширование не сильно поможет biggrin

--------------------

#7vitnet

  • 14 февраля 2012 13:43
  • Регистрация: 18.09.2010
  • Был(а) онлайн: 12.05.2024
  • Комментариев: 304
  • 0
Не совсем понел первых 2 шага: Конфиг PHP модуля, установить желательно из СВН (Linux, FreeBSD, etc..) Можно по подробнее?

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Архив новостей
Ноябрь 2024 (9)
Октябрь 2024 (169)
Сентябрь 2024 (13)
Август 2024 (60)
Июль 2024 (12)
Июнь 2024 (30)