Herkese selamlar,
Bugün
PHP ile nasıl basit düzeyde bir
Cache sistemi yapacağımızı anlatacağım. Bu Cache sistemimiz
Memcached veya
Redis gibi veritabanı için olan cache yapıları gibi değil. Sık ziyaret edilen fakat çok fazla değişmeyen sayfalarımızı kullanıcılara veritabanı vb. işlemler yapmadan çok daha hızlı şekilde göstermek için bir
File System Cache yapısı kullanmayı göreceğiz.
File System Cache: Temel İşleyiş Mantığı
Öncelikle tabiki de çalışma mantığını öğrenmek, her yeni bilgiyi bu makale gibi kaynaklara geri dönüp her defasında okumak veya kopyala yapıştır yapmamanız için önemli.
File System Cache'in temel mantığı birden fazla nokta ile ( veritabanı bağlantısı + diğer PHP dosyaları gibi ) bağlantı kurarak yaratılan bir sayfanın
son halini alıp tek bir
statik cache dosyası haline getirmek ve sizin Route - URL/istek yönetim - sisteminiz sayfayı tekrar sizden talep ettiğinde önce cache dosyası ve süresini kontrol edip
varsa/yaratılmışsa bunu servis etmenizdir. "Output Buffering": Türkçe Adı ile "Çıktı Tamponlama"
Şimdi ingilizcesini yazmamın sebebi
Output Buffering kelimesinin sonuna yazılım dilinin adını ekleyerek
File System Cache için o dilde kullanılabilecek
dökümantasyon sayfalarına hızlıca erişebiliyor olmanızdır.
PHP'de bir sayfanın çıktısını tamponlamak için "
ob_" ile başlayan fonksiyon grubunu kullanıyoruz. ( Buradaki
ob_ aslında
Output Buffering kelimelerinin kısaltması

)
ob_start() , ob_get_contents() ve ob_end_flush() Kullanımı ob_start(): Bizim bir PHP dosyasındaki çıktı tamponlama işlemimizi başlatır. Bu fonksiyonu aynı buradaki gibi doğrudan
yazdığınız andan itibaren kendisinden sonra yazılan ve bir
ÇIKTI üreten bütün değerleri toplamaya ve kaydetmeye başlar.
ob_get_contents(): ob_start() ile kendisinin yazıldığı ana kadar geçen süre zarfındaki ÇIKTI olarak üretilen tüm içeriği size verir.
ob_end_flush(): Hem tamponlama işlemini bitirir hemde tamponlama da kalan değerleri temizler.
ob_start(); // Tamponlama başladı
echo "Ben bir çıktı örneğiyim";
$cache = ob_get_contents(); // Bu ana kadarki ÇIKTI üreten içerik bir değişkene aktarıldı
ob_end_flush(); // Tamponlama işlemi bitti ve içerik temizlendi
Cache Dosyasını Yaratmak ve Kullanmak
Yukarıdaki koddan gelen elimizde bir $cache değişkenimiz ve içeriğimiz artık var. Öncelikle bunu projemiz içerisindeki uygun bir alana dosya olarak kayıt ediyoruz.
$cache_dosya_yolu = "cache_dizinimiz/" . md5($_SERVER['REQUEST_URI']); // burada ki $_SERVER['REQUEST_URI'] komutumuz bize URL'deki isteği iletiyor ve biz bunu dosya isimleri okunaksız olsun diye md5'liyoruz.
file_put_contents($cache_dosya_yolu, $cache);
Şimdi aynı dosyamızın başına artık çalıştırmadan önce şöyle bir kontrol ekliyoruz
$cache_dosya_yolu = "cache_dizinimiz/" . md5($_SERVER['REQUEST_URI']);
if (file_exists($cache_dosya_yolu) && (time() - filemtime($cache_dosya_yolu) < 60)) { // Buradaki filemtime dosyanın değişikliğe uğradığı tarihi bize döndürüyor ve biz bunun süresini cache'i tutmak istediğimiz kadar olarak kontrol ediyoruz
// Sizin dosyayı okuma ve ekrana bastırma işlemleriniz
// Örneğin: readfile($cache_dosya_yolu);
}
else{
// Demekki cache dosyası henüz oluşturulmamış VEYA süresi geçmiş ve siz yenisini yaratacaksınız
}Tam Sayfanızın Örnek Hali $cache_dosya_yolu = "cache_dizinimiz/" . md5($_SERVER['REQUEST_URI']);
if (file_exists($cache_dosya_yolu) && (time() - filemtime($cache_dosya_yolu) < 60)) {
// ...
exit();
}
ob_start();
echo "Ben bir çıktı örneğiyim";
$cache = ob_get_contents();
file_put_contents($cache_dosya_yolu, $cache);
ob_end_flush();Yapınızı Class kullanımı, küçük cache dosyalarınızı veritabanına koyma vb. bir sürü işlem ile geliştirebilirsiniz. Wordpress'te ki bir çok eklenti veya yazılım - genellikle - temelinde bu sistemi kullanır.
Bol Şanslar ve iyi geliştirmeler