Çarşamba, 25 Mayıs 2011

Hook Yöntemi ile Önbellek Temizleme

 

Site üzerinde yaptığımız değişiklikler, CodeIgniter'daki önbellek kütüphanesini kullanmadığımız halde güncellenmeyebilir. Sitenizin bulunduğu sunucu eğer bir proxy sunucu üzerinden nete erişiyorsa, çoğu zaman yenilenmesi gereken sayfalarınız "proxy cache" denilen, sunucu ile kullanıcının tarayıcısı arasında bulunan proxy önbellek üzerinde tutularak yenilenmez.

Bu sorunu html header üzerine meta bilgileri göndererek çözmek bir yoldur. CodeIgniter üzerinde hook kullanarak bu yöntemin nasıl uygulandığını bu yazıda inceleyeceğiz. Öncelikle application/config/config.php dosyası içinde hook kullanacağımızı bildirelim:

$config['enable_hooks'] = TRUE;

Daha sonra application/config/hook.php dosyası içine kullandığımız hook tanımını yapalım:

$hook['pre_controller'][] = array(
  'class'    => 'nocache',
  'function' => 'pre_controller',
  'filename' => 'nocache.php',
  'filepath' => 'hooks',
  'params'   => array()
); 

Yukarıdaki tanımda nocache.php isimli bir hook dosyamızın olduğunu, bu dosyada nocache isimli bir sınıfımızın bulunduğunu, controller yüklenmeden önce yüklenmesi gerektiğini söylemekteyiz. Yukarıdaki bu kodu, hook.php dosyamızın içinde belirtilen yere eklememiz yeterlidir. Son adım olarak ise hook dizini altına açacağımız nocache.php isimli dosyamızın içeriğini ekleyelim:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class nocache {

  function nocache()
  {
  }

  function pre_controller()
  {
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
  }

} 


Yukarıdaki sınıfımız ile sunucu üzerinde tutulan önbellek tarihini eski bir tarihe göndererek sayfamızın hep yeni kalmasını sağlıyoruz. Bu yöntem ile hook özelliğinin kullanılarak önbellek temizliğinin nasıl yapıldığını inceledik. Farklı yöntemler ile benzer temizliğin yapılması da mümkündür.

Bu yazı CodeIgniter forumda bulunan Lima isimli kullanıcının yazısı çevrilerek hazırlanmıştır.

Yorumlar

hooks kullanımının amacı bumudur? Yani benim controllers yüklenmeden oluşturmam gereken üstbaşlıklar var bu şekilde kullanacağız değil mi?

Yorum Ekle