PHP ile veri cache (önbellekleme) işlemi

Cache (önbellek) gerçekleştirilen bir işlem sonucunun daha hızlı, daha zahmetsiz erişilebilecek bir yere kaydedilmesidir. Kaydedilen veriler belirli bir süre kullanılabilir olup, süre dolduğunda güncellenirler. Örnek ile açıklayacak olursak…

Düzenleme yaptığım bir e-ticaret sitesinde fiyatlar Euro cinsinden girilmiş. Fiyatların bulunduğu sayfalar her açıldığında PHP dosyası TCMB’nın sitesine bağlanıp döviz kurlarını alarak Euro cinsinden olan fiyatı Türk Lirası’na çeviriyordu.

Tahmin edebileceğiniz gibi sayfa her yenilendiğinde bir web sayfasını çağırmak da sunucu performansını oldukça düşüren bir işlemdi. Sadece bu da değil, eğer ziyaretçi sayımız fazla olursa TCMB’nın sunucuları saldırı yaptığımızı sanarak ip’mizi de engelleyebilirdi. İşte burada imdadıma cache sistemi yetişti…

Bu işlem için yazımın altında bulunan basit cache sınıfını hazırladım. Bu cache sistemi eğer 24 saatlik süre doldu ise TCMB üzerinden kurları çekip “kurlar.txt” adı ile yerel sunucuya kaydediyor, eğer süre dolmadı ise “kurlar.txt” dosyasında bulunan içeriği çıktı olarak veriyor. Üzerinde basit değişiklikler yaparak kur dışındaki işlemler için de kullanabilirsiniz.

Önemli Not: “kurlar.txt” dosyasını oluşturup chmod değerini 777 verdikten sonra ilk test için $cache_suresi değişkenini 0 olarak ayarlayın. Eğer 0 olarak ayarlamazsanız dosyanın oluşturulma tarihinden $cache_suresi sonrasına kadar “kurlar.txt” nin içi boş kalacaktır.

<?php

# önbellek süresi (saniye cinsinden)
# ilk çalıştırmada 0 yapın!
$cache_suresi           = 43200;

class onbellek{
# eğer önbellek süresi doldu ise yapılacak işlemler. (Örn: Veritabanından şu veriyi çek)
function veri(){
    $sayfa      = file_get_contents('http://www.tcmb.gov.tr/kurlar/today.xml');
    preg_match('~<CurrencyName>EURO</CurrencyName><ForexBuying>.*</ForexBuying><ForexSelling>(.*)</ForexSelling>~isU',$sayfa,$cikti);
    $euro       = $cikti[1];
    
    return ($euro);
}
function cache($dosyaadi){
    global $cache_suresi;
    if(filemtime($dosyaadi)+$cache_suresi<time()){
        $dosya = fopen($dosyaadi, 'w');
        $veri  = $this->veri();
        fwrite($dosya, $veri);
        fclose($dosya);
        return $veri;
    }else{
        $dosya  = fopen($dosyaadi, 'r');
        $icerik = fread($dosya, filesize($dosyaadi));
        fclose($dosya);
        return $icerik;
    }
}
}

$onbellek      = new onbellek();
# kurlar.txt dosyasının chmod ayarını 777 yapmayı unutmayın!
echo $onbellek->cache('kurlar.txt');
?>

MyBB son konuları html sayfalarda gösterme

Html ile dinamik olarak güncellenen sayfalar oluşturamayız bu yüzden bu işlemi yapmak için php kullanmalıyız. Örnek olarak yazdığım bir kod aşağıda bulunuyor boş zaman buldukça yazıyı ve kodu güncelleyeceğim, şu haliyle sorunsuz çalışmaktadır.

<html>
<head>
<title>0Derece.net</title>
</head>
<body>
<a href="http://www.0derece.net" title="0Derece">0Derece</a>
<table>
<?php

/**
 * @author 0Derece
 * @filesource 0derece.net
 * @since 010611
 * @tutorial 
 * @version 0.1 beta
 * @copyright 2011
 */

// database bilgilerini almak icin config.phpyi, forum ile ilgili bilgileri almak icin settings.phpyi include ediyoruz
include ('inc/config.php');
include ('inc/settings.php');

// kurulumda prefix degistirilmisse konulari cekerken sorun cikmasin diye threads tablosunun basina prefix ekliyoruz
$tablo  =   $config['database']['table_prefix'].'threads';

// mysql ile baglanti kuruyoruz
$baglan = mysql_connect($config['database']['hostname'],$config['database']['username'],$config['database']['password']);
    // eger baglanamazsak bizi uyarmasini sagliyoruz
	if ( ! $baglan ) die ("MySQL ile veri baglantisi kurulamiyor!");
    
    // databasei seciyoruz
	mysql_select_db($config['database']['database'], $baglan)
        // database secerken hatayla karsilasirsa cikacak yazi
		or die ("Veritabanina ulasilamiyor!" . mysql_error() );

// databasedan son 10 konu seciliyor
$sorgu = mysql_query("SELECT tid,subject,lastposter,lastposteruid FROM $tablo order by tid desc LIMIT 10",$baglan);
if ( ! $sorgu ) die ("Sorgu calistirilamiyor :S");  // eger hata verirse
while ( $son10 = @mysql_fetch_assoc ($sorgu) ){     // yapilan sorgu son10 degiskenine ataniyor
?>
<tr>
    <!-- konuyu gosteriyoruz -->
    <td><a href="<?php echo $settings['bburl'].'showthread.php?tid='.$son10['tid']; ?>"><?php echo $son10['subject']; ?></a></td>
    <!-- son mesaj atan uyeyi gosteriyoruz -->
    <td><a href="<?php echo $settings['bburl'].'member.php?action=profile&uid='.$son10['lastposteruid']; ?>"><?php echo $son10['lastposter']; ?></td>
</tr>
<?php
$i++;
}
?>
</table>
</body>
</html>

PHP’nin Babası ve Zend’in Sahibi Zeev Suraski Türkiye’ye Gelecek!

Zeev Suraski Üstelik Türkiye’ye tatil yapmak için değil 😀 Golden Horn Ventures’in düzenlediği Web Programcıları etkinliğine geliyor. PHP gibi önemli bir programlama dilinin kurucusu Zeev Suraski ve yine onun kadar önemli bir isim olan Derick Rethans bu etkinlikte konuşmacı olarak yer alacaklar.

Bu etkinlik Nippon Hotel, Taksim’de 24 Ocak 2009 Tarihinde yapılacak, Katılım ücretsiz.

Etkinlik 1 gün sürecek ve 2 kısım şeklinde ilerleyecek. İlk kısımda daha çok teknik bilgiler verilecek iken ikinci kısımda daha sosyal işleri olacak :). Program hakkında genel bilgi verecek olursak şöyle olacak:

Açılış konuşması Zeev Suraski
Kapanış konuşması Derick Rethan
PHP uygulamalarında güvenlik Cumhur Onat
PHP Smarty Framework ile web uygulamaları Özgür Köy
Java Spring Framework ile web uygulamaları Muharrem Taç
3D Flash Engine – Web’de oyun Yogurt Teknolojileri
PHP5 ve SuperGlobals kullanımı Tuncay Bahadır
Freelance yazılım geliştirme ve vergilendirme
Yazılım geliştirme ve fikir haklarının korunması, telifler Ahmet Ayhan Özge
Başarı hikayesi Cumhur Onat
Venture capital ve melek yatırımlar Golden Horn Ventures
İş planı hazırlama Golden Horn Ventures

Program hakkında ayrıntılara buradan ulaşabilirsiniz.