Сивуля. День другий. Рущина – Пекло – Тавпіширка – Бистриця Прогулянка Мармаросами
Жов 01

code-igniterЄ такий PHP Framework CodeIgniter. Особисто мені він дуже подобається – простий, швидкий, дуже гарна документація (в т.ч. на російській мові). Робив я декілька проектів на ньому і не використовував кеш фреймворка. А в одному проекті кеш був обов’язковим. І тут я стикнувся з двома неприємними особливостями реалізації кеша у цьому фреймворку -
1) щоб очистити кеш для сторінки треба руками очищувати файл
2) файл має вигляд md5($url)

Це є досить незручно, відкриваємо файл system/libraries/Output.php (або створюємо новий файл system/application/libraries/Output.php)
і вносимо такі правки
1. В класі CI_Output створюємо метод _transform_path

function _transform_path($uri){
$uri = str_replace("http://", "", $uri);
$pattern_delete = ‘#[^a-zA-Z0-9]#’;
$uri = preg_replace($pattern_delete, "-", $uri);
$uri .= "-";
return $uri;
}

2. В цьому ж класі створюємо метод clean_cache для очистки кеша (якщо викликати його з відповідного контролера без параметру – кеш для цього контролера буде вилучатись, якщо буде параметр – для того параметру).

function clean_cache($uri=null){
    global $CFG;
    if (!$uri){
        $CI =& get_instance();
        $uri =  $CI->config->item(‘base_url’).
        $CI->config->item(‘index_page’).
        $CI->uri->uri_string();
    }
    $cache_path = ($CFG->item(‘cache_path’) == ) ? BASEPATH.‘cache/’ :     $CFG->item(‘cache_path’);
    $filepath = $cache_path . $this->_transform_path($uri) . md5($uri);
    @unlink($filepath);
}

3. В методі _write_cache замінюємо рядок

$cache_path .= md5($uri);

на

$cache_path .= $this->_transform_path($uri) . md5($uri);

Все, відтепер файли кешу будуть мати більш зручну назву
example.com-5ababd603b22780302dd8d83498e5172.php
замість
5ababd603b22780302dd8d83498e5172.php

Теги: , , ,

Читайте також:

Залишити коментар

Коментарів: 2 для “Кеш в CodeIgniter”

  1. 1. ScorpioNo Gravatar Сказав:

    и конечно лучше использовать что-то вроде memcache и кэшировать данные в памяти, а не на жестком диске, поскольку так быстрее

  2. 2. yAnTarNo Gravatar Сказав:

    На рахунок цього не спорю, але для таких проектів, як цей, було достатньо файлового кеша.

*