Bir siteniz var. Hitiniz çok yüksek. Sunucunuz iyi değil veya yetmiyor. O zaman imdadınıza cache yetişecektir.  Cache ile (adından da anlaşılacağı üzere) sisteminizde sayfaları önceden kaydedip, gelen ziyaretçilere kaydedilmiş sayfayı göstererek, mysql sorgu, cpu kullanımınızı azaltabilirsiniz. Bu işlem php ile sanıldığı kadar zor değildir. Bu işlemi kendi yöntemimle değil, internette okuduğum bir makelenin kodlarıyla sizlere anlatmaya çalışacağım. (Benimki biraz karışık :) )

  1. <?
  2. $filename = "%%-".md5($_SERVER['REQUEST_URI'])."-%%.html";
  3. $cachefile = "cache/".$filename;
  4. $cachetime = 3 * 60 * 60; // Cache Süresi
  5. if (file_exists($cachefile))
  6. {
  7. if(time() - $cachetime < filemtime($cachefile))
  8. {
  9. readfile($cachefile);
  10. exit;
  11. }
  12. else
  13. {
  14. unlink($cachefile);
  15. }
  16. }
  17. ob_start();
  18. ?>

Bu kodlarımızı sayfamızın başına ekliyoruz. İşin mantığına gelince; öncelikle bulunduğumuz sayfanın url’sini alıp bunu md5 fonksiyonu ile şifreliyoruz. Daha sonra dizinimizde bulunan cache klasöründe şifrelediğimiz dosyanın var olup olmadığına bakıyoruz. Eğer dosyamız var ise ve $cachetime değişkeni ile belirlediğimiz süreden önce oluşturmamış ise sayfaya o dosyayı çağırıyoruz ve exit yaparak diğer kodlarımızı çalıştırmıyoruz. Şayet dosya mevcut değil ya da daha belirlediğimiz zamandan önce oluşturulmuş ise sayfamızın en altına eklediğimiz aşağıdaki kodlar devreye girecek.
  1. <?
  2. $fp = fopen($cachefile, 'w+');
  3. fwrite($fp, ob_get_contents());
  4. fclose($fp);
  5. ob_end_flush();
  6. ?>
Bu kodlarda ise şifrelediğimiz html dosyasını açıp o an sayfamızda ne var ise yazdırma işlemini yapıyoruz. Daha sonra döngü yine yukarda anlattığım gibi devam ediyor.
Sonuç olarak:
  • Cpu kullanımını azalttık
  • Mysql sorgu sayımızı azaltık

Yararlandığım kaynak : Burası

2 Responses to “Php ile cache”

  • berk:

    sistem güzel fakat güvenlik kodu olan sayfalarımda sorun oluyor haliyle :( bunu nasıl aşabiliriz ki?

  • admin:

    Güvenlik kodunu nasıl ekrana bastırdığınız ve nasıl kontrol ettirdiğiniz önemli burada. Şayet session mysql cookie falan kullanıyorsanız mecburen yemeyecektir. Fakat formdan post ettirip değerlendiriyorsanız aynı güvenlik kodu cache süresi kadar durur tek sorun bu olacaktır. Güvenlik kodunun farklı olmasını istiyorsanız bu seferde js ile güvenlik kodu oluşturup ekrana bastırarak, form ile post ettirmeyi deneyiniz. Form kontrol alanında cache uygulamamanız gerekiyor :D O kısımlarda da ajax kullanmak en mantıklısı gibi geliyor.

Leave a Reply