Кеширане

Код:
<?php
class cache
{
    var $cache_dir = './wt/cache/';//Това е директорията, където ще се съхраняват кеш файловете.
    var $cache_time = 1000;//Колко време ще продължи кеш файлове за секунди.
    
    var $caching = false;
    var $file = '';

    function cache()
    {
        //Конструктор на класа
        $this->file = $this->cache_dir . urlencode( $_SERVER['REQUEST_URI'] );
        if ( file_exists ( $this->file ) && ( fileatime ( $this->file ) + $this->cache_time ) > time() )
        {
            //Взимаме кеша
            $handle = fopen( $this->file , "r");
            do {
                $data = fread($handle, 8192);
                if (strlen($data) == 0) {
                    break;
                }
                echo $data;
            } while (true);
            fclose($handle);
            exit();
        }
        else
        {
            //Създаваме кеша :
            $this->caching = true;
            ob_start();
        }
    }
    
    function close()
    {
        //Трябва да имаме това в края на всяка страница
        if ( $this->caching )
        {
            //Кеширване на съдържанието и го показваме в файл
            $data = ob_get_clean();
            echo $data;
            $fp = fopen( $this->file , 'w' );
            fwrite ( $fp , $data );
            fclose ( $fp );
        }
    }
}


//Пример:
$ch = new cache();
echo date("D M j G:i:s T Y");
$ch->close();
?>

Обяснявам...

function.cache()

Това е функция на конструктора на класа. Работата на тази функция е да се провери дали има кеширани файлове за страницата, която искате, или трябва да го създадете. Ето как това се прави:

$this->file = $this->cache_dir . urlencode( $_SERVER['REQUEST_URI'] );

Тази линия създава името на файла на кешираната нашата страница. Така че кеширания файл ще бъде нещо подобно /patch/to/cachedir/REQUEST_URI

if ( file_exists ( $this->file ) && ( fileatime ( $this->file ) + $this->cache_time ) > time() )

Тук се провери дали е налице кеширана версия на тази страница, и ако файлът трябва да бъде пресъздаден, защото е изтекъл. Ако файлът се кешира, ще покаже на кеширани страници и на изхода. Аз ще обясня защо по-късно ще излезе. Ако кеширана файла трябва да бъде създаден този кодекс ще бъде изпълнена:

$this->caching = true;
ob_start();

function close()

Тази функция трябва да бъде извикана от края на скрипта, и то ще свърши останалата работа. Всъщност това е необходимо, само когато сме в процес на кеширане, затова тя започва с твърдението, if ( $this->caching )
Нека ти обясня какво се случва тук:

$data = ob_get_clean();

Тук можем да получим всички данни от производството на буфер, докато ние не го унищожим, и да се изложат на данни в $data променлива. Четирите отчети, като folow се представят данни и след това се написва кеш файл.

Отстраняване на неизправности

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

<?php
$a = new cache();
код
...
...
$a->close();
?>

Ако имаме код след $a->close() изявление, в класа няма да работи правилно. Това е така, защото на exit() декларация в cache() функция.

Разбира се, че може да отнеме този код и да работи за собствените си нужди.

Едно бързо решение е да се премахне exit() декларация в cache() и след това използвайте клас по този начин:

<?php
$a = new cache();
if ( $a->caching )
{
код
...
...
...
}
$a->close();
?>
 

Back
Горе