Sayfalar

time etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
time etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

26 Ocak 2008 Cumartesi

Php Cache Sistemi

Öncelikle Sorumuz Şu Olmalıdır


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


$cachetime = 3 * 60 * 60; // Cache Süresi 3 saate