Kasım 21, 2008, 08:34:23 ÖS *
Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz
 
   Ana Sayfa   Yardım Ara Giriş Yap Kayıt  
Sayfa: [1]
  Yazdır  
Gönderen Konu: SQL Caching - Nasıl Yapılır?  (Okunma Sayısı 965 defa)
Fesih
Yönetici
*****
Mesaj Sayısı: 414


Üyelik Bilgileri
« : Temmuz 13, 2007, 05:34:28 ÖÖ »

Hız Hız Hız..
İlk kullanılmaya başlandığından bu yana internet üzerinde çok fazladeğişiklik oldu. Sadece metinden oluşan web sitelerinden, görselliğinön plana çıktığı şaheserlere; statik HTML sayfalarından, karmaşıkprogramlara geçiş hepimizin gözü önünde gerçekleşti. Önceden "sadeceiçerik önemlidir" diyenler şimdi görselliğinde ne kadar ön plandaolduğunu inkar edemiyorlar. Fakat bu kadar yoğun içerik sunan websitelerinde yeni bir problem ortaya çıktı: Hız. Halen çok fazla Dial-Upkullanıcısı olduğu düşünüldüğünde (ne yazıkki bende onlardan biriyim),kullanılan resimlerin biraz yük getirdiği açık. Hele sunucu taraflıprogramlama dilleriyle birlikte varlığından daha fazla haberdar olunanveritabanları da işin içine girince ortalık biraz daha karışıyor.

Kullanacağınız görselliğe bir diyeceğim yok, ama veritabanı probleminiz için belki bir çözüm önerebilirim.

Madem web siteleri hazırlıyorsunuz, o zaman biliyorsunuzdur; cache(önbellek diyenlerde var, cache demeyi tercih edeceğim) kavramıtarayıcılarla beraber bizlerinde günlük yaşamına adım attı. Hala "cachenedir?" diye soranlarınız mı var? Ufak bir açıklama yapalım o zaman.

İnternette dolaştığınızda, geztiğiniz sitelerde bulunan resimler, htmlsayfaları, sunucu taraflı dillerin HTML çıktıları, scriptler, cssdosyaları, vs 'nin hepsi önce bilgisayarınıza yüklenir. Bu dosyalarınhepsi tarayıcınıza özel klasörlerde bulunur. Neden mi? Bir daha aynısiteyi ziyaret ederseniz aynı sitenin daha hızlı yüklendiğinigörürsünüz. Tarayıcı bu siteden yüklenmiş olan dosyaları tekraryüklemek için zahmete girmez, daha önce yüklenmiş olan dosyalarıkullanır. İşte bu şekilde bilgisayarınıza yüklenmiş olan dosyalartopluluğuna cache adı verilir. Cache'in bir işlevini de, tarayıcınızı"çevrim dışı" çalıştırdığınızda görebilirsiniz. Daha önce ziyaretettiğiniz siteleri, internete bağlı olmadığınız halde, görebilirsiniz.Burada yine cache kullanılmaktadır.

Neden mi anlattım bu kadar şeyi? Önereceğim çözümde buna benzerolacakta ondan. Hemen bir örnekle açıklamaya çalışayım. Diyelimki biralışveriş sitesi hazırlamaktasınız ve bu sitede ürünler birçokkategorinin altında listeleniyorlar. Site sahiplerinin kolayca kategoriekleyip, var olanlarda değişiklik yapabilmesi içinde bütün kategorileriveritabanında tutmaya karar verdiniz (Belki çok iyi değil ama sıkkullanılan bir çözüm). Sitenin her sayfasında bu kategorilereihtiyacınız olacağına göre her sayfada veritabanına bağlanıpkategorileri tekrar tekrar sorgulayacak mısınız? Diyelimki böyleyaptınız, ama sorunu biraz daha komplike hale getirelim. Klasik DHTMLdrop down menü kullanmaya karar verdiniz, yani kategorileriniz altkategorileri de var. Bu da sorgulamanın bir sorgudan oluşmayacağını,oluşsa bile bir çok dizi işlemiyle uğraşacağınızı gösterir. Kafanızıbiraz daha kaşıyın ve işin içinden çıkmaya çalışın. Yada sizi zahmetesokmayayım, cache mantığını kullanalım

İlk Göz Ağrısı: Dosyalar

Daha fazla laf salatası yapmadan, bir örnek ile başlayıp ona devamedeceğim. Örneğimiz kullanıcı kaydı yapan bir formdan oluşuyor.

   
Kod:
   
<html>
  <head>
    <title>forum.zoque.net</title>
  </head>
  <body>
    <form>
      <label for="ad">Adınız</label> <input type="text" name="ad" id="ad">
 
      <label for="soyad">Soyadınız</label> <input type="text" name="soyad" id="soyad">
 
      <input type="submit" value="Üye Ol!">
    </form>
  </body>
</html>
Kullanıcıdan adını ve soyadınıisteyen ufak bir form yaratmış olduk. Ertesi gün patronunuz yanınızauğradı ve kullanıcının bulunduğu ili soran bir bölüm daha eklemeniziistedi.. Hemen eklediniz tabiki..

   
Kod:
   
<label for="il">Yaşadığınız İl</label> 
<select name="il" id="il">
   <option>--Lütfen Seçiniz--</option>
   <option value="01">Adana</option>
   <option value="02">Adıyaman</option>
   <option value="03">Afyon</option>
   ...
</select>
81 ilimizi alt alta dizdiniz,tebrikler. Peki yazılan bu form yurtdışında kullanılırsa ne olacak?Yurtdışında yaşayanlara Türk illerini gösteremezsiniz. Yine radikal birçözüm bulduk ve illeri veritabanına taşıdık, bravo yeniden.

İsteğimiz bu illeri her seferinde veritabanından sorgulayarak oluşanhız kaybını yok etmek (Biliyorum, çok kısa bir süreden bahsediyoruz buörnekte. Fakat bu sorgunun yanına başka sorgularda gelince hızfarkedecektir, bana inanın). Niyetimiz veritabanından çektiğimizverileri bir dosyaya kaydetmek ve yeniden sorgulamak gerektiğinde budosyadaki içeriği kullanarak işleri hızlandırmak.. Yine sana işimizdüştü, dosya fonksiyonları.

Devam etmeden once aşağıda kullanacağım dosya fonksiyonlarının işlevlerini hatırlatmak istiyorum:

fopen: Dosya açmak için kullanılır.
fwrite: Dosya içeriği yazmak için kullanılır.
fread: Dosya içeriği okumak için kullanılır.
fclose: Açılmış bir dosyayı kapatmak için kullanılır.
file_exists: Bir dosyanın var olup olmadığını kontrol etmek için kullanılır.
filemtime: Dosyanın son değişiklik tarihini öğrenmek için kullanılır.
filesize: Dosyanın byte olarak büyüklüğünü verir.

Şimdi kodlara geçelim.

   
PHP Code:
   
               <?php
mysql_connect
('localhost', 'kullanıcı_adı', 'parola');
mysql_select_db('cache_test');

$sql = 'SELECT kod, sehir FROM sehirler ORDER BY sehir ASC';
$query = mysql_query($sql);


while(
$sehirler = mysql_fetch_object($query) )
  echo
'<option value="' . $sehirler->kod . '">' . $sehirler->sehir . '</option>';
?>
      
   
Önce mysql_connect() vemysql_select_db() yardımıyla veritabanına bağlantıyı sağlıyoruz. Dahasonra veritabanında istediğimiz sorguyu mysql_query() ilegerçekleştiriyor, mysql_fetch_object() ile de veritabanından dönensonucu istediğimiz şekilde kullanıyoruz.

Sanırım bu bize istediğimizi veriyor. Şimdi bu kodla biraz oynayarak alınan sonucu cache dosyasına yazmaya çalışalım.

   
PHP Code:
   
               
<?php
function checkCacheFile($file){
   return
file_exists($file);
}

function
getContents(){
  global
$cacheFile;
  if(
checkCacheFile($cacheFile) ){
   
$fd = fopen($cacheFile, 'r');
   
$contents = fread($fd, filesize($cacheFile) );
   
fclose($fd);
    return
unserialize($contents);
 }
else{
   
mysql_connect('localhost', 'kullanıcı_adı', 'parola');
   
mysql_select_db('cache_test');

   
$sql = 'SELECT kod, sehir FROM sehirler ORDER BY sehir ASC';
   
$query = mysql_query($sql);

   
$tmp = array();

   while(
$sehirler = mysql_fetch_object($query) )
     
$tmp[ $sehirler->kod ] = $sehirler->sehir;

     
$fd = fopen($cacheFile, 'w');
     
fwrite($fd, serialize($tmp) );
     
fclose($fd);
     return
$tmp;
   }
}

$cacheFile = 'cacheExample.txt';
$sehirler = getContents();

foreach(
$sehirler as $kod => $sehir)
   echo
'<option value="' . $kod . '">' . $sehir . '</option>';
?>
      
   
Kodlar biraz daha uzamış gibi görünüyor. Ama gözünüz korkmasın, aslında kolay bir mantık takip ediyor.

Kod sırası takip edilirse, işlemin getContents() fonksiyonununçağırılması ile başladığını söyleyebiliriz. Bu fonksiyon çağırıldığındaöncelikle bir cache dosyasının var olup olmadığı checkCacheFile()fonksiyonu yardımıyla kontrol ediliyor. Eğer bir cache dosyasıbulunamazsa veritabanına bağlanılıp aynı sorgular gerçekleştiriliyor.Fakat bu sefer uygulanan adımda bir farklılık var. Gelen sonuc direkçıktı olarak kullanılmıyor, onun yerine $tmp adında bir diziyeaktarılıyor. Tüm sonuçlar bu diziye aktarıldıktan sonra fopen()yardıyımla cache dosyası yazma modunda (w) açılıyor ve elde ettiğimizdizi serialize edilerek dosyaya yazdırılıyor.

Bir daha aynı sorgu gerçekleştirildiğinde, artık bir cache dosyasıbulunacağından dolayı, önce cache dosyası okuma modunda açılır (r) veiçeriğin tamamı okunur. Daha sonra elde edilen içerik unserializeedilerek geri döndürülür.

Programı çalıştırdığınızda cache dosyanızda buna benzer bir görüntü olduğunu görmelisiniz:

   
Alıntı:
                  
                     a:81:{s:2:"01";s:5:"Adana";s:2:"02";s:8:"Adıyaman";s:2:"03";s:5:"Afyon  ";i:68;s:7:"Aksaray";...                
Tamam mı, Devam mı?

Buraya kadar hayatımızı kurtardık, ama farketmeden büyük bir hata yaptık!

Diyelimki devlet büyüklerimiz bir ilçemizi daha il yaptı, 82 ilimizoldu. Problem yok, hemen veritabanına ekledik. Ama biz bir cachedosyası oluşturmuştuk ve o dosya varken veritabanına ulaşmaya gerek yokdemiştik! Ne yapacağız?

Hemen kafanızın yanında bir ampül yandığını görüyorum, dosyayı sileriz!Evet çözüm bu kadar basit. Her seferinde dosyayı silmeye başladıkdiyelim ama ya unutursak ne olacak? En iyisi biraz otomatik çalışalımve bırakalım yazdığımız program bizim yerimize düşünsün.

Çözümümüzü iki adımdan oluşturalım. İlk olarak (buradagösterilmeyecek), veritabanına yeni bir il eklediğimiz dosyada ufak birdeğişiklik yapalım ve unlink() fonksiyonu ile yeni il eklendiğinde,oluşan cache dosyasını silelim. İkinci adımda ise, otomatik olarakoluşan cache dosyasını belirli periyotlarda silelim ve dosyayaveritabanından taze bilgiler gelmesini sağlayalım. Örneğimizdekodlarımızı, dosyayı haftada bir yenileyecek şekilde değiştirelim.

Elimizde örnek üzerinde, bulduğumuz çözümü uygulamak da kolay olacak. Değişiklik sadece checkCacheFile() fonksiyonunda olacak.

   
PHP Code:
   
               <?php
$maxTime
= 604800; // saniye = 1 hafta

function checkCacheFile($file){
  global
$maxTime;
  return (
file_exists($file) && ( filemtime($file) > ( time() - $maxTime ) ) );
}
?>
      
   
Yaptığımız işlem şu: Dosyanın var olupolmadığı kontrol edildiğinde file_exists() fonksiyonundan dönen değerinyanında, cache dosyasının en son değişiklik tarihini de kontroledeceğiz. Bu dosyaya yapılan en son değişiklik tarihi, dosyanınyaratıldığı tarihtir. Bu nedenle 1 haftadan daha önce oluşturulmuşdosyaları yokmuş farzedip, yenisini oluşturmaya çalışacağız. Dosyabulunmadığı zaman yeni dosyayı yazma modunda açtığımızdan (w), eskidosya silinerek yerine yenisi oluşturulacaktır.

En basit haliyle yaratılacak cache dosyası bu kadarlık bir el emeğindenoluşuyor. Bir sonraki adımda işin içine biraz daha profesyonel bilgikatmaya çalışacağız.

O Obje Senin, Bu Obje Benim

Buraya kadar öğrendiğimiz basit bilgiyi, biraz derleyip toparlayalım veşık bir görüntü verelim. Yazdıklarımızı bir sınıf halinde toparlayalım.

Buradan itibaren yazacağım sınıf, başka bir sınıfın yardımıylaoluşturulacaktır. Bu sınıfı forum.zoque.net adresinde debulabilirsiniz. Yardımcı sınıf aşağıda verilmektedir. (Tabikiyazacağımız yeni sınıfı, bu sınıf olmadan da yazabiliriz. Hem arayaveritabanı kodları ekleyerek asıl konudan uzaklaşmamak, hemde ikisınıfın birlikte nasıl kullanılabileceğini göstermek adına böyle biryol seçtim)

   
PHP Code:
   
               <?php
class DB{
  var
$host = 'localhost';
  var
$database = 'cache_test';
  var
$user = 'kullanıcı_adı';
  var
$pass = 'parola';

  var
$link;
  var
$db_link;
  var
$query;
  var
$record = array();
  var
$errno = 0;
  var
$error = '';
  var
$show_error = 0;
  var
$stop = 0;
 
  function
connect(){
    if(!
$this->link){
     
$this->link = @mysql_connect($this->host,$this->user,$this->pass);
      if(!
$this->link)
         
$this->print_error();

     
$this->db_link= @mysql_select_db($this->database,$this->link);
      if(!
$this->db_link)
         
$this->print_error();
    }
 }

 function
print_error(){
   
$this->error = @mysql_error();
   
$this->errno = @mysql_errno();
    if(
$this->stop ){
         echo
'</td></tr></table>';
         if(
$this->show_error)
            echo
$this->errno.' : '.$this->error;
         exit;
     }
  }

  function
query($sql){
     
$this->connect();
     
$this->query = @mysql_query($sql);
     if(!
$this->query)
       
$this->print_error();
     return
$this->query;
  }

  function
next($query=-1) {
      if (
$query!=-1)
         
$this->query=$query;
     
$this->record = @mysql_fetch_array($this->query);
      return
$this->record;
 }

 function
get_error(){
     return
$this->error;
 }

 function
get_errno(){
    return
$this->errno;
 }

 function
num($query=-1){
     if (
$query!=-1)
       
$this->query=$query;
     return @
mysql_num_rows($this->query);
 }


 function
get($name){
     return
$this->record[$name];
 }

 function
close(){
    @
mysql_close($this->link);
 }

}
?>
      
   
Bu sınıf dosyası veritabanına bağlantıişlemini ve sorgulamaya kolaylaştıracak bir veritabanı bağlantısınıfıdır. Dikkat edilirse özellikle connect() metodu çağırılmadıkçaveya direk olarak query() metodu çağırılıp sorgulama yapılmadıkçaveritabanı bağlantısı açılmamaktadır. Buda istenmeyen bir yavaşlamaolmaması anlamına gelir.

DB sınıfı yardımıyla Cache sınıfı iki şekilde oluşturulabilir.Birincisi DB sınıfından türetme yapılabilir. İkinci olarak bir DBsınıfı nesnesi Cache sınıfına parametre olarak verilebilir. Yapacağımızörnekte ikinci yolu kullanacağım.

Sınıfı adım adım oluşturalım.

   
PHP Code:
   
               class Cache{
   var
$db = null;
   var
$filename = 'cacheExample.php';

   function
Cache($db = null){
       if(
$db != null && is_subclass_of($db, 'DB') )
           
$this->db = $db;
   }
}
      
   
Şu anda Cache sınıfı iki sınıfdeğişkeni ve Constructordan oluşuyor. Birinci sınıf değişkeni 'DB'sınıfının nesnesini tutacak olan değişken, ikincisi ise cache dosyasıolarak kullanacağımız dosyayı belirten değişkendir. Dikkat ederseniz busefer cache dosyası PHP dosyası olarak belirtilmiş. Cache dosyasını busefer düz text dosyası olarak tutmayıp, PHP dosyası oluşturacağız.Constructor ise, zorunlu olmayan bir parametre alıyor. Eğer buparametre DB sınıfının bir nesnesi olursa, daha sonraki işlemlerdekullanabilmek için $db sınıf değişkenine atanıyor.

Cache nesnesi yardımıyla veri okumayı read() metodu yardımıyla yapacağız.

   
PHP Code:
   
               var $MAX_TIME = 604800; // 1 hafta

function read(){
  if(
$this->exists() ){
     include
$this->filename;
     return
$__cacheVar;
  }
}

function
exists(){
    if(
file_exists($this->filename) && filemtime($this->filename) > ( time() - $this->MAX_TIME ) )
        return
TRUE;
    return
FALSE;
}
      
   
read() metodunu eklemeden önce, birsınıf değişkeni daha ekliyoruz: $MAX_TIME. Bu değişken saniye cinsindencache dosyalarının ömrünü belirleyecek. Daha önceki örnekte kullanılan$maxTime değişkeni gibi.

read() metodu basit olarak öncelikle cache dosyasının varolupolmadığını kontrol ediyor. Varsa bu dosyayı ekliyor ve bu dosya içindebulunan bir değişkeni geri döndürüyor (Unutmayın, cache dosyalarını PHPdosyası olarak oluşturuyoruz!). Dosyanın varolup olmadığının kontrolünüyapan exists() metodu, daha önce yazdığımız fonksiyonun tam olarakaynısı.

Şu anda read() fonksiyonu, istediğimiz dosya varsa işlemi güzel olarakyapıyor, peki ama ya yoksa? O zaman dosyanın bulunmadığı durumda neyapması gerektiğini de belirtelim.

   
PHP Code:
   
               function read(){
   if(
$this->exists() ){
      include
$this->filename;
      return
$__cacheVar;
   }
 
   
$var = $this->readFromSQL();
   
$this->createCacheFile($var);

   return
$var;
}
      
   
Cache dosyası bulunamadığında,veritabanından gerekli bilgiler okunarak ( readFromSQL() ) bir cachedosyası oluşturulacak ( createCacheFile() ) ve son olarakveritabanından okunacak bilgiler geri döndürülecek ( return $var ).Mantık aynı mantık değil mi?

Oku Oku Bitmedi!

Sırada veritabanından bilgileri okumak var. Burada yukarıda belirtilen DB sınıfı kullanılacak.

   
PHP Code:
   
               function readFromSQL(){
   
$sql = 'SELECT kod, sehir FROM sehirler ORDER BY sehir ASC';

   if(
$this->db == null )
       
$this->db = new DB;

   
$db = $this->db;
   
$db->query( $sql );
   
$var = array();

   while(
$db->var->next() )
       
$var[ $db->get('kod') ] = $db->get('sehir');

   return
$var;
}
      
   
readFromSQL() kısaca ve sıraylaveritabanında istediğimiz sorguyu gerçekleştirerek, sonucu bir diziyeaktarıyor ve geri döndürüyor. Burada asıl olarak anlatmak istediğimbölüm farklı. Dikkat ederseniz bir bölümde $db sınıf değişkeninin nulldeğerine sahip olup olmadığı kontrol ediliyor. HatırlarsanızConstructorda $db değişkeninin ataması isteğe bağlıydı. Eğer sınıfnesnesi oluşturulurken bir DB nesnesi parametre olarak verilmezse, $dbdeğişkeninin değeri varsayılan değer olarak kalır (null). Bu durumdayeni bir DB nesnesi oluşturmak bize düşüyor.

Son olarak cache dosyamızı oluşturalım.

   
PHP Code:
   
               function createCacheFile($var){
   
$fileString = ' ?php'."\n\n";
   
$fileString .= "\t" . '$__cacheVar = array();'."\n";

   foreach(
$var as $key => $value)
     
$fileString .= "\t".'$__cacheVar[\''.$key.'\'] = \'' . addslashes($value) . '\'; ' . "\n";

   
$fileString .= '?>';

   
$fp = fopen($this->filename, 'w');
   
fwrite($fp, $fileString);
   
fclose($fp);
}
      
   
Öncelikle dosyaya yazacağımız ifadeyioluşturuyoruz. Bu basit bir string değişken olacak. Bir PHP dosyasıoluşturduğumuza göre <?php ile başlayıp ?> ile bitirmeliyiz. Ohalde string değişkene öncelikle <?php eklenecek ve en son ise ?>eklenecektir. Arada ise, read() metodunda kullandığımız $__cacheVardeğişkenini oluşturacağız. Öncelike $__cacheVar değişkeni bir diziolarak tanımlanıyor ve bir foreach() döngüsü yardımıyla elimizde $vardeğişkeninde bulunan değerler bu diziye aktarılıyor. Dosyamızınoluşturulması ise bu kadarlık bir çabadan oluşuyor.

Not: Dosya UNIX dosya sitemiyle olu?turuluyor. Oluşan dosyayı notepadile açarsanız, satırların birbirine karışmış olduğunu görebilirsiniz.Merak etmeyin hatalı çalışmaz. Notepad ile de doğru olarakgörüntülenmesini isterseniz \n yerine \r\n yazabilirsiniz.

Sınıfa birde dosyayı silen ufak bir method eklersek:

   
PHP Code:
   
               function erase(){
   @
unlink($this->filename);
}
      
   
Sınıfımız tamamlanmış olacaktır.Oluşturulmuş sınıfın tamamı ve biraz daha gelişmiş hali aşağıdagösteriliyor. Gelişmişten kasıt, birden fazla sorgunun cache dosyasınınoluşturulmasıdır. Aşağıdaki sınıf yardımıyla cache dosyaları tabloadına göre oluşturuluyor. ( Örneğin sehir tablosunun cache dosyasıolusturuluyorsa, sehir.cache.php adında bir dosya oluşturuluyor. )

   
PHP Code:
   
               <?php
class Cache{
   var
$db = null;
   var
$filename;
   var
$table;
   
   var
$MAX_TIME = 604800; // bir hafta

   
function Cache($file, $db = null){
       if(
$db != null && is_subclass_of($db, 'DB'))
           
$this->db = $db;
       
$this->setFile( $file ); // $file, tablo adı olarak veriliyor. ör: sehir
   
}

   function
setFile($file){
     
$this->table = $file;
     
$this->filename = './' . $file . '.cache.php';
   }

   function
read(){
      if(
$this->exists() ){
         include
$this->filename;
         return
$__cacheVar;
      }

     
$var = $this->readFromSQL();
     
$this->createCacheFile( $var );
      return
$var;
   }

   function
readFromSQL(){
     
$sql = $this->createSQL();
      if(
$sql == '' )
         return;
 
      if(
$this->db == null )
           
$this->db = new DB;
     
$db = $this->db;
     
$db->query( $sql );

     
$var = array();
      while(
$db->next() )
         
$var[ $db->get(0) ] = $db->get(1);
      return
$var;
   }

   function
createCacheFile($var){
       
$fileString = '<?php' . "\n";
       
$fileString .= '/**' . "\n";
       
$fileString .= ' * This cache file is created by cache.class ' . "\n";
       
$fileString .= ' * Programmer: Yusuf Uğur Soysal ' . "\n";
       
$fileString .= ' * Created: ' . date('d.m.Y H:i:s') . "\n";
       
$fileString .= ' * Timestamp: ' . time() . "\n";
       
$fileString .= ' */ ' . "\n\n";

       
$fileString .= "\t" . '$__cacheVar = array();' . "\n";

        foreach(
$var as $key => $value )
           
$fileString .= "\t" . '$__cacheVar[\''.$key.'\'] = \'' . addslashes( $value ) . '\'; ' . "\n";

       
$fileString .= '?>';

       
$fp = fopen($this->filename, 'w');
       
fwrite($fp, $fileString);
       
fclose($fp);
   }


   function
createSQL(){
         
$sql = '';

         switch(
$this->table ){
               case
'kategori':
                   
$sql = 'SELECT id, kategori FROM kategori WHERE ust="0" ORDER BY kategori ASC';
                    break;
               case
'sehir':
                   
$sql = 'SELECT kod, sehir FROM sehir ORDER BY sehir ASC';
                    break;
               case
'ulke':
                   
$sql = 'SELECT kod, ulke FROM ulke ORDER BY ulke ASC';
                    break;
               case
'universiteler':
                   
$sql = 'SELECT id, uni FROM universiteler ORDER BY uni ASC';
                    break;
               case
'meslekler':
                   
$sql = 'SELECT id, dept FROM meslekler ORDER BY dept ASC';
                    break;
         }

         return
$sql;
   }

   function
exists(){
         if(
file_exists($this->filename) && filemtime($this->filename) > ( time() - $this->MAX_TIME ) )
             return
TRUE;
         return
FALSE;
   }

   function
erase(){
       @
unlink( $this->filename );
   }

}
?>
      
   
Kullanım Örneği:

   
PHP Code:
   
               $cache = new Cache('sehir');
$sehirler = $cache->read();
print_r($sehirler);
      
   
Bu dökümandaki kodlar sadece örnek amaçlıdır. Tüm örnekler Win2K PHP 4.3.3 Apache 2.0 ile test edilmiştir.

Yusuf Uğur Soysal - hayalet.
Logged
Sayfa: [1]
  Yazdır  
 

Ahtapot 2
Bu Sayfa 1.295 Saniyede 17 Sorgu ile Oluşturuldu

Kasım 09, 2008, 12:25:04 ÖS