• 26-05-2008, 10:00:10
    #1
    Merhaba arkadaşlar ,
    Joomla gibi sistemlerde biliyoruz ki "Cache" sistemi var ve girilen sayfaların daha sonraki girişlerde daha çabuk yüklenmesini sağlıyor, bu "Cache" sisteminin mantığı nedir ve normal bir "Php" sisteme nasıl uyarlanabilir.Konu hakkında bilgi ve tecrübelerinizi paylaşırsanız sevinirim.
  • 27-05-2008, 19:58:59
    #2
    Up Up Up , yokmu arkadaşlar beni bilgilendirip yönlendiricek, ne oLdu R1o coderLarına
  • 27-05-2008, 20:04:40
    #3
    Üyeliği durduruldu
    Neden Cache Sistemi Kullanmalıyım ?

    Siteniz hit aldığında sunucuda sorunlar çıkardığı zaman

    Mysql overload olduğunda

    Cpu kullanımı arttığında

    Host Bulamaz Hale Geldiğinizde

    Yada kendi sunucunuz olsa dahi sitenize girmeye

    korktuğunuzda ( ya ben siteye girince sunucu çökerse dediğinizde)

    İşte cache sistemindeki amacımız kaynak tüketimini en aza indirmek

    Yukarda saydıgım durumların en feci olanı mysql sunucu özellikleri düşük ise

    Siteyi 4 5 defa yenileyince mysql tavan yapıyor O hiç sevmediğin olay Olur

    Databaseye Bağlanamadım

    Konu fazla uzadı sanırım r10 da açılan konuda hakimi arkadaşımız

    Burada basit bir cache betiği yayınlamış

    yazmış olduğu betikte ufak bi güvenlik açığı vardı biraz düzenledim betiği

    Betik 2 Kısımdan Oluşuyor birinci kısım sayfanın en üstüne yazılacak kısmı

    2 kısım ise sayfanın en altına yazılacak kısmı

    Aşşağıdaki kısmı sayfanın en üstüne yazılacak kısmı

    <?
    $filename = "%%-".md5($_SERVER['REQUEST_URI'])."-%%.html";
    $cachefile = "cache/".$filename;
    $cachetime = 3 * 60 * 60; // Cache Süresi
    if (file_exists($cachefile))
    {
    if(time() - $cachetime < filemtime($cachefile))
    {
    readfile($cachefile);
    exit;
    }
    else
    {
    unlink($cachefile);
    }
    }
    ob_start();
    ?>



    Aşşağıdaki kısmı isi sayfanın en altına yazılacak kısmı


    <?
    $fp = fopen($cachefile, 'w+');
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_end_flush();
    ?>




    Temel Olarak Betiğin Ne işlev gördüğünü açıklıyayım basit Bir şekilde

    Herhangi bir ziyaretçi sitemizi ziyaret etti örnek verecek olursak

    http://www.sitemiz.com/mysql-php-ajax.html

    cache betiği url yi alıyor ve isimini md5 liyor ve $cachefile diye bir değişkene atıyor

    ve daha sonra sayfanın en altına eklediğimiz

    $fp = fopen($cachefile, 'w+');

    fwrite($fp, ob_get_contents());

    fclose($fp);

    ob_end_flush();


    Php Kodları $cachefile dosyasını yazılabilir şekilde açıyor ve sayfa içeriğini

    yazıyor Tekrar Bir ziyaretçi

    http://www.sitemiz.com/mysql-php-ajax.html

    yazıp sitemizi ziyaret ettiğinde üstü yazdığımız php kodları devreye giriyor

    if(time() - $cachetime < filemtime($cachefile))

    {

    readfile($cachefile);

    exit;

    }


    Şimdiki zaman ile dosya zamanı arasındaki fark cache süresinden kücük ise readfile

    ile daha önce kaydetmiş olduğumuz html dosyasını ziyaretciye gösteriyor

    Bizim burdaki Kazancımız sitemize giren 2. ziyaretci izin mysql sorguları php sorguları yerine

    daha önce kaydetmiş olduğumuz html dosyasını gösterdik ve kaynaktan tasarruf ettik

    Umarım Anlatabilmişimdir unutmadan cache süresini $cachetime değişerek kendinize göre ayarlayabilirsiniz



    kaynak:s4l1h Kişisel Günce: Php Cache Sistemi

    emege saygım var

    bir başka örnek:http://www.wm-tr.com/kullanimi-basit-cache-sistemi
  • 27-05-2008, 20:08:39
    #4
    Bu kodu sayfalarin en basina
    $filename = md5($_SERVER['REQUEST_URI']).'.html';
    $cachefile = "cache/".$filename;
    $cachetime = 3 * 60 * 60; // Cache Süresi
    if (file_exists($cachefile))
    {
    if(time() - $cachetime < filemtime($cachefile))
    {
    readfile($cachefile);
    exit;
    }
    else
    {
    unlink($cachefile);
    }
    }
    ob_start();
    bu koduda en altina

    $fp = fopen($cachefile, 'w+');
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_end_flush();
    sonra anadizine /cache klasoru olustur 777 yetki ver.
  • 27-05-2008, 20:14:43
    #5
    Her ikisinide deniyorum teşekkürler arkadaşlar.
  • 27-05-2008, 20:18:22
    #6
    Üyeliği durduruldu
    excellency adlı üyeden alıntı: mesajı görüntüle
    Her ikisinide deniyorum teşekkürler arkadaşlar.
    ne demek rep atman yeterli
  • 29-05-2008, 00:33:47
    #7
    Bu kodu kullandığımda sayfadaki swf dosyaları çalışmıyor.
    Caddeciyiz adlı üyeden alıntı: mesajı görüntüle
    Bu kodu sayfalarin en basina
    $filename = md5($_SERVER['REQUEST_URI']).'.html';
    $cachefile = "cache/".$filename;
    $cachetime = 3 * 60 * 60; // Cache Süresi
    if (file_exists($cachefile))
    {
    if(time() - $cachetime < filemtime($cachefile))
    {
    readfile($cachefile);
    exit;
    }
    else
    {
    unlink($cachefile);
    }
    }
    ob_start();
    bu koduda en altina

    $fp = fopen($cachefile, 'w+');
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_end_flush();
    sonra anadizine /cache klasoru olustur 777 yetki ver.
  • 29-05-2008, 00:42:19
    #8
    excellency adlı üyeden alıntı: mesajı görüntüle
    Bu kodu kullandığımda sayfadaki swf dosyaları çalışmıyor.
    Eger swf dosyalarin src=asd.swf seklinde ise calismamasi dogal.
    /cache/234873298432984.html gibi bi cache cekerken cache klasorunde asd.swf ariyodur(tahminimce).

    swf calistirdigin yeri asd.swf olarak degilde
    http://siteadresi.xxx/asd.swf
    seklinde yaparsan calismasi lazim.
  • 29-05-2008, 00:55:50
    #9
    Dosyaları bu şekilde çağırıyorum , $siteurl / $file şeklinde.