• 17-03-2010, 22:06:42
    #1
    Merhaba, sayfanın tamamını dosya oluşturarak cache'liyebiliyorum. Ama bana tamamı değil sadece sayfa içerisinde bir kısmın cachelenmesi lazım.

    mesela div içeriği kategori sorgusu.. istatistik kısmı... bunlar sol tarafta. bunları nasıl cacheliyebilirim ?

    <?
    $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();
    ?>
    Cachelenecek sayfanın içeriği...
    <?
    $fp = fopen($cachefile, 'w+');
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_end_flush();
    ?>
  • 18-03-2010, 00:16:26
    #2
    Üyeliği durduruldu
    include edilen dosya şeklinde ise cachleyemezsiniz. onu ayri dosya olarak düşünüp içeriğini ayri dosya olarak oluşturmalisiniz
  • 18-03-2010, 00:19:43
    #3
    ob_start(); a kadar olan kısmı cachelenmesini istediğin yerden hemen önce yazıcaksın.
    cachelenmesini istediğin yerden hemen sonra da $fp = fopen($cachefile, 'w+'); satırından itibaren olan kısmı yazıcaksın.

    bu kodları sayfanın en başında ve sonunda kullanmak zorunda değilsin, aynen yazdığın gibi "Cachelenecek sayfanın içeriği... " olan kısımdan önce ve sonra yazıcaksın yani
  • 18-03-2010, 18:00:28
    #4
    Üyeliği durduruldu
    Invictus adlı üyeden alıntı: mesajı görüntüle
    ob_start(); a kadar olan kısmı cachelenmesini istediğin yerden hemen önce yazıcaksın.
    cachelenmesini istediğin yerden hemen sonra da $fp = fopen($cachefile, 'w+'); satırından itibaren olan kısmı yazıcaksın.

    bu kodları sayfanın en başında ve sonunda kullanmak zorunda değilsin, aynen yazdığın gibi "Cachelenecek sayfanın içeriği... " olan kısımdan önce ve sonra yazıcaksın yani
    Hocam file cachede sayfanın tamamını alıyor o nedenle dediğin olmaz.

    Ana dosya olacka birtane ondan başka bir dosyayı include edeceksin
    include etiğin dosyada file cache uygularsın index dosyasında php işlemleri her seferinde yapılır.
  • 19-03-2010, 21:52:12
    #5
    batinduz adlı üyeden alıntı: mesajı görüntüle
    Hocam file cachede sayfanın tamamını alıyor o nedenle dediğin olmaz.

    Ana dosya olacka birtane ondan başka bir dosyayı include edeceksin
    include etiğin dosyada file cache uygularsın index dosyasında php işlemleri her seferinde yapılır.
    ufak bir örnek verebilir misiniz ?

    aslında verdiğim kod istediğim kısmı cacheliyor ama oradaki eğer varsa dosya oku ve çık (exit komutu olduğu için sol taraf yükleniyor. php exit olduğundan orta ve sağ alan yüklenmiyor.
  • 20-03-2010, 03:23:45
    #6
    batinduz adlı üyeden alıntı: mesajı görüntüle
    Hocam file cachede sayfanın tamamını alıyor o nedenle dediğin olmaz.

    Ana dosya olacka birtane ondan başka bir dosyayı include edeceksin
    include etiğin dosyada file cache uygularsın index dosyasında php işlemleri her seferinde yapılır.
    sayfanın tamamını almak zorunda değil. cachelenecek dosya ismini değiştirip istediğin kadar uygulayabilirsin. include etmek ile aynı sayfada kullanmak aynı şey zaten. include edilen sayfa varolan sayfa içindeki bir kodmuş gibi işlem görür.

    örnek kod şöyle olmalı
    <? 
    <html><head></head><body>
    cache olmayan içerik................
    .........................................
    
    //1. cache alanı başlıyor
    $filename1 = "%%BIRINCI-CACHE-".md5($_SERVER['REQUEST_URI'])."-%%.html"; 
    $cachefile = "cache/".$filename1; 
    $cachetime = 3 * 60 * 60; // Cache Süresi 
    if (file_exists($cachefile)) 
    { 
    if(time() - $cachetime < filemtime($cachefile)) 
    { 
    readfile($cachefile); 
    exit; 
    } 
    else 
    { 
    unlink($cachefile); 
    } 
    } 
    ob_start(); 
    ?> 
    Cache girecek birinci bölüm... 
    <? 
    $fp = fopen($cachefile, 'w+'); 
    fwrite($fp, ob_get_contents()); 
    fclose($fp); 
    ob_end_flush(); 
    ?>
    
    cache dışındaki içerik...............
    ..................................................
    <?
    //2. cache alanı başlıyor
    $filename2 = "%%IKINCI-CACHE-".md5($_SERVER['REQUEST_URI'])."-%%.html"; 
    $cachefile = "cache/".$filename2; 
    $cachetime = 3 * 60 * 60; // Cache Süresi 
    if (file_exists($cachefile)) 
    { 
    if(time() - $cachetime < filemtime($cachefile)) 
    { 
    readfile($cachefile); 
    exit; 
    } 
    else 
    { 
    unlink($cachefile); 
    } 
    } 
    ob_start(); 
    ?> 
    2. CACHELENEN ALAN
    (birinci alandan farklı bir html dosyasında tutulur)
    .......................................
    ....................................... 
    <? 
    $fp = fopen($cachefile, 'w+'); 
    fwrite($fp, ob_get_contents()); 
    fclose($fp); 
    ob_end_flush(); 
    ?>
    
    cachesiz olarak devam eden içerik..........
    </body></html>

    burada cachelenen dosyanın adını değiştirmek önemli olan. yoksa aynı dosyaya üzerine yazılır ikinci cachelenen alan.


    veya ikinci bir yo daha var.

    cacheleeceğn alanı bu şekilde ayrı bir dosyada cacheli olarak hzırlayacaksın. aa o dosyayı include ile değil file_get_contents() ile çağıracaksın. ama bunun performansının iyi olmayacaını düşünüyorum.
  • 20-03-2010, 07:18:08
    #7
    Üyeliği durduruldu
    digiklan adlı üyeden alıntı: mesajı görüntüle
    sayfanın tamamını almak zorunda değil. cachelenecek dosya ismini değiştirip istediğin kadar uygulayabilirsin. include etmek ile aynı sayfada kullanmak aynı şey zaten. include edilen sayfa varolan sayfa içindeki bir kodmuş gibi işlem görür.

    örnek kod şöyle olmalı
    <? 
    <html><head></head><body>
    cache olmayan içerik................
    .........................................
    
    //1. cache alanı başlıyor
    $filename1 = "%%BIRINCI-CACHE-".md5($_SERVER['REQUEST_URI'])."-%%.html"; 
    $cachefile = "cache/".$filename1; 
    $cachetime = 3 * 60 * 60; // Cache Süresi 
    if (file_exists($cachefile)) 
    { 
    if(time() - $cachetime < filemtime($cachefile)) 
    { 
    readfile($cachefile); 
    exit; 
    } 
    else 
    { 
    unlink($cachefile); 
    } 
    } 
    ob_start(); 
    ?> 
    Cache girecek birinci bölüm... 
    <? 
    $fp = fopen($cachefile, 'w+'); 
    fwrite($fp, ob_get_contents()); 
    fclose($fp); 
    ob_end_flush(); 
    ?>
    
    cache dışındaki içerik...............
    ..................................................
    <?
    //2. cache alanı başlıyor
    $filename2 = "%%IKINCI-CACHE-".md5($_SERVER['REQUEST_URI'])."-%%.html"; 
    $cachefile = "cache/".$filename2; 
    $cachetime = 3 * 60 * 60; // Cache Süresi 
    if (file_exists($cachefile)) 
    { 
    if(time() - $cachetime < filemtime($cachefile)) 
    { 
    readfile($cachefile); 
    exit; 
    } 
    else 
    { 
    unlink($cachefile); 
    } 
    } 
    ob_start(); 
    ?> 
    2. CACHELENEN ALAN
    (birinci alandan farklı bir html dosyasında tutulur)
    .......................................
    ....................................... 
    <? 
    $fp = fopen($cachefile, 'w+'); 
    fwrite($fp, ob_get_contents()); 
    fclose($fp); 
    ob_end_flush(); 
    ?>
    
    cachesiz olarak devam eden içerik..........
    </body></html>

    burada cachelenen dosyanın adını değiştirmek önemli olan. yoksa aynı dosyaya üzerine yazılır ikinci cachelenen alan.


    veya ikinci bir yo daha var.

    cacheleeceğn alanı bu şekilde ayrı bir dosyada cacheli olarak hzırlayacaksın. aa o dosyayı include ile değil file_get_contents() ile çağıracaksın. ama bunun performansının iyi olmayacaını düşünüyorum.
    benim bu şekilde yaptığım denemelerde istediğim sonucu alamamıştım.
    ben şu şekilde kullanıyorum.
    Bir index.php dosyası var


    <?
    //Buraya her seferinde çalışacak kodlar
    include "index1.php";
    İndex1.php de ise
    <?
    //Cache kodları
    //normal php kodları
    ama şunu söyleyim üyelik sistemi vb. phpnin sık yorumlandığı bir sistemde file cache kullanmayın.
  • 20-03-2010, 12:34:27
    #8
    Üyeliği durduruldu
    digiklan adlı üyeden alıntı: mesajı görüntüle
    veya ikinci bir yo daha var.
    böyle ugrasmak yerine sadece degiskenleri cachlemek daha mantikli. boyle kendinizi daha cok yormus ve her islem icin ayri ugrasmis olursunuz. yazilim olarak yorucu bir yaklasim oldugunu dusunuyorum, serialize, unserialize gibi islemler yapilabilir
  • 20-03-2010, 12:42:50
    #9
    Üyeliği durduruldu
    cache uygulayacagin kodlari ayri bir php sayasina al ve bu sayfaya cache uygula. sonrasinda bu cache uyguladigin sayfayi gostermek istedigin yere include et, bu kadar..

    buradan yararlanabilirsin: http://www.makaleci.com/programlama-...-php-7036.html