v2.5.2
Giriş yap

PHP Cache Konusunda Yardım

bugraskl
534 defa görüntülendi

Öncelikle herkese merhaba, bir projede sadece sayfada belirli kısımları cacheleyip eğer cache varsa
kullanıcıya cache teki veriyi göstermek istiyorum. Bunun için bir cache class ı buldum, üzerinde biraz
oynama yapıp projeme entegre etmek istedim ancak bu classta cachelenen kısımdan sonrasını exit; ile bitiriyor.
Yani sayfamın kalan kısmını örneğin footer kısmı çalışmaz hale geliyor. Bu classı aşağıya ekliyorum.
Eğer class ı düzeltebilirsek sorun çözülecek ya da başka bir cacheleme konusunda tavsiye verebilecek
olursa o konuda da çok memnun olurum. İnternette bir çok arama yapmama rağmen işime yarayacak
bir sonuç elde edemedim. Şimdiden teşekkür ederim. Herkese iyi çalışmalar dilerim.

Class'ın çalışma mantığı
<?php $rankCache = new Cacher("cache",$_SERVER["REQUEST_URI"],1); ?>

    <?php $rankCache->cacheStart(); ?> //başlangıç noktası
    //cachelenecek kısım//
    <?php $rankCache->cacheEnd(); ?> // bitiş noktası

Bu da kullandığım class

    <?php class Cacher
{
    public function __construct($dir, $uri, $time)
    {
        $this->dir = $dir;
        $this->uri = md5($uri) . '.php';
        $this->time = $time;
    }

    public function cacheStart()
    {
        if (file_exists($this->dir . "/" . $this->uri) && (time() < filemtime($this->dir . "/" . $this->uri) + ($this->time * 60 * 60))) {
            include $this->dir . "/" . $this->uri;
            exit; //sorun yaşadığım kısım
        } else {
            ob_start([$this, "process"]);
        }

    }

    private function compress($buffer)
    {

        $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
        $buffer = str_replace(': ', ':', $buffer);
        $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer);

        return $buffer;
    }

    public function process($buff)
    {

        file_put_contents($this->dir . "/" . $this->uri, $this->compress($buff));

        return $buff;
    }

    public function cacheEnd()
    {
        ob_end_flush();
    }

}

?>


Cevap yaz
Cevaplar (0)
Henüz kimse cevap yazmadı. İlk cevap yazan sen ol!