Payidar.NET - Bilgi ve Paylaşım Forumu
Go Back   Payidar.NET - Bilgi ve Paylaşım Forumu > Internet > Web Master Dünyası

Duyurular

Web Master Dünyası Web tasarımı ve teknik donanımları konusunda uzmanlaşmış veya uzmanlaşmayı kafasına koymuş üyelerimiz için büyük bir web dersanesi niteliğinde bir bölüm. Farklı bilgiler, bu yeni dünyadan en son haberler ve daha fazlası.

Cevapla
 
LinkBack Konu Seçenekleri Gösterim Modu
  #1 (Daim)  
Alt 06.01.07, 02:20
عاكف ار - ait Kullanıcı Resmi (Avatar)
Forum Vekili

 
Üyelik Tarihi: 30.11.06
Şehir: Istanbul
Yaş: 24
Mesajlar: 4.577
Blog Başlıkları: 2
Karizma Puanı: 536
عاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond reputeعاكف ار has a reputation beyond repute
SQL Caching - Nasıl Yapılır?

Hız Hız Hız..
İlk kullanılmaya başlandığından bu yana internet üzerinde çok fazla değişiklik oldu. Sadece metinden oluşan web sitelerinden, görselliğin ön plana çıktığı şaheserlere; statik HTML sayfalarından, karmaşık programlara geçiş hepimizin gözü önünde gerçekleşti. Önceden "sadece içerik önemlidir" diyenler şimdi görselliğinde ne kadar ön planda olduğunu inkar edemiyorlar. Fakat bu kadar yoğun içerik sunan web sitelerinde yeni bir problem ortaya çıktı: Hız. Halen çok fazla Dial-Up kullanı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 olunan veritabanları 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 "cache nedir?" diye soranlarınız mı var? Ufak bir açıklama yapalım o zaman.

İnternette dolaştığınızda, geztiğiniz sitelerde bulunan resimler, html sayfaları, sunucu taraflı dillerin HTML çıktıları, scriptler, css dosyaları, vs 'nin hepsi önce bilgisayarınıza yüklenir. Bu dosyaların hepsi tarayıcınıza özel klasörlerde bulunur. Neden mi? Bir daha aynı siteyi ziyaret ederseniz aynı sitenin daha hızlı yüklendiğini görürsünüz. Tarayıcı bu siteden yüklenmiş olan dosyaları tekrar yüklemek için zahmete girmez, daha önce yüklenmiş olan dosyaları kullanır. İşte bu şekilde bilgisayarınıza yüklenmiş olan dosyalar topluluğ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 ziyaret ettiğ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 benzer olacakta ondan. Hemen bir örnekle açıklamaya çalışayım. Diyelimki bir alışveriş sitesi hazırlamaktasınız ve bu sitede ürünler birçok kategorinin altında listeleniyorlar. Site sahiplerinin kolayca kategori ekleyip, var olanlarda değişiklik yapabilmesi içinde bütün kategorileri veritabanında tutmaya karar verdiniz (Belki çok iyi değil ama sık kullanılan bir çözüm). Sitenin her sayfasında bu kategorilere ihtiyacınız olacağına göre her sayfada veritabanına bağlanıp kategorileri tekrar tekrar sorgulayacak mısınız? Diyelimki böyle yaptınız, ama sorunu biraz daha komplike hale getirelim. Klasik DHTML drop down menü kullanmaya karar verdiniz, yani kategorileriniz alt kategorileri 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 zahmete sokmayayı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 devam edeceğ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"><br /> 
       <label for="soyad">Soyadınız</label> <input type="text" name="soyad" id="soyad"><br /> 
       <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ıza uğradı ve kullanıcının bulunduğu ili soran bir bölüm daha eklemenizi istedi.. 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şan hı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ız farkedecektir, bana inanın). Niyetimiz veritabanından çektiğimiz verileri bir dosyaya kaydetmek ve yeniden sorgulamak gerektiğinde bu dosyadaki içeriği kullanarak işleri hızlandırmak.. Yine sana işimiz düş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- Kodu:
<?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() ve mysql_select_db() yardımıyla veritabanına bağlantıyı sağlıyoruz. Daha sonra veritabanında istediğimiz sorguyu mysql_query() ile gerçekleştiriyor, mysql_fetch_object() ile de veritabanından dönen sonucu 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- Kodu:
<?php 
function checkCacheFile($file){
    return 
file_exists($file);
}
 
function 
getContents(){
   global 
$cacheFile;
   if( 
checkCacheFile($cacheFile) ){
     
$fd fopen($cacheFile'r'); 
     
$contents fread($fdfilesize($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($fdserialize($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 diziye aktarı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ğimiz dizi 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) ve içeriğin tamamı okunur. Daha sonra elde edilen içerik unserialize edilerek 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:

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";...
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 ilimiz oldu. Problem yok, hemen veritabanına ekledik. Ama biz bir cache dosyası oluşturmuştuk ve o dosya varken veritabanına ulaşmaya gerek yok demiş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ık diyelim ama ya unutursak ne olacak? En iyisi biraz otomatik çalışalım ve bırakalım yazdığımız program bizim yerimize düşünsün.

Çözümümüzü iki adımdan oluşturalım. İlk olarak (burada gösterilmeyecek), veritabanına yeni bir il eklediğimiz dosyada ufak bir değişiklik yapalım ve unlink() fonksiyonu ile yeni il eklendiğinde, oluşan cache dosyasını silelim. İkinci adımda ise, otomatik olarak oluşan cache dosyasını belirli periyotlarda silelim ve dosyaya veritabanından taze bilgiler gelmesini sağlayalım. Örneğimizde kodları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- Kodu:
<?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 olup olmadığı kontrol edildiğinde file_exists() fonksiyonundan dönen değerin yanında, cache dosyasının en son değişiklik tarihini de kontrol edeceğiz. Bu dosyaya yapılan en son değişiklik tarihi, dosyanın yaratıldığı tarihtir. Bu nedenle 1 haftadan daha önce oluşturulmuş dosyaları yokmuş farzedip, yenisini oluşturmaya çalışacağız. Dosya bulunmadığı zaman yeni dosyayı yazma modunda açtığımızdan (w), eski dosya silinerek yerine yenisi oluşturulacaktır.

En basit haliyle yaratılacak cache dosyası bu kadarlık bir el emeğinden oluşuyor. Bir sonraki adımda işin içine biraz daha profesyonel bilgi katmaya ç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ıyla oluşturulacaktır. Bu sınıfı forum.zoque.net adresinde de bulabilirsiniz. Yardımcı sınıf aşağıda verilmektedir. (Tabiki yazacağımız yeni sınıfı, bu sınıf olmadan da yazabiliriz. Hem araya veritabanı kodları ekleyerek asıl konudan uzaklaşmamak, hemde iki sınıfın birlikte nasıl kullanılabileceğini göstermek adına böyle bir yol seçtim)

PHP- Kodu:
<?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ça veya direk olarak query() metodu çağırılıp sorgulama yapılmadıkça veritabanı bağlantısı açılmamaktadır. Buda istenmeyen bir yavaşlama olmaması 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 DB sı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- Kodu:
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ıf değ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 bu sefer cache dosyası PHP dosyası olarak belirtilmiş. Cache dosyasını bu sefer düz text dosyası olarak tutmayıp, PHP dosyası oluşturacağız. Constructor ise, zorunlu olmayan bir parametre alıyor. Eğer bu parametre DB sınıfının bir nesnesi olursa, daha sonraki işlemlerde kullanabilmek 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- Kodu:
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, bir sınıf değişkeni daha ekliyoruz: $MAX_TIME. Bu değişken saniye cinsinden cache 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 varolup olmadığını kontrol ediyor. Varsa bu dosyayı ekliyor ve bu dosya içinde bulunan bir değişkeni geri döndürüyor (Unutmayın, cache dosyalarını PHP dosyası olarak oluşturuyoruz!). Dosyanın varolup olmadığının kontrolünü yapan exists() metodu, daha önce yazdığımız fonksiyonun tam olarak aynısı.

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

PHP- Kodu:
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 cache dosyası oluşturulacak ( createCacheFile() ) ve son olarak veritabanı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- Kodu:
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ırayla veritabanında istediğimiz sorguyu gerçekleştirerek, sonucu bir diziye aktarıyor ve geri döndürüyor. Burada asıl olarak anlatmak istediğim bölüm farklı. Dikkat ederseniz bir bölümde $db sınıf değişkeninin null değerine sahip olup olmadığı kontrol ediliyor. Hatırlarsanız Constructorda $db değişkeninin ataması isteğe bağlıydı. Eğer sınıf nesnesi oluşturulurken bir DB nesnesi parametre olarak verilmezse, $db değişkeninin değeri varsayılan değer olarak kalır (null). Bu durumda yeni bir DB nesnesi oluşturmak bize düşüyor.

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


PHP- Kodu:
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 ifadeyi oluşturuyoruz. Bu basit bir string değişken olacak. Bir PHP dosyası oluşturduğumuza göre <?php ile başlayıp ?> ile bitirmeliyiz. O halde string değişkene öncelikle <?php eklenecek ve en son ise ?> eklenecektir. Arada ise, read() metodunda kullandığımız $__cacheVar değişkenini oluşturacağız. Öncelike $__cacheVar değişkeni bir dizi olarak tanımlanıyor ve bir foreach() döngüsü yardımıyla elimizde $var değişkeninde bulunan değerler bu diziye aktarılıyor. Dosyamızın oluşturulması ise bu kadarlık bir çabadan oluşuyor.

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

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

PHP- Kodu:
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ğıda gösteriliyor. Gelişmişten kasıt, birden fazla sorgunun cache dosyasının oluşturulmasıdır. Aşağıdaki sınıf yardımıyla cache dosyaları tablo adına göre oluşturuluyor. ( Örneğin sehir tablosunun cache dosyası olusturuluyorsa, sehir.cache.php adında bir dosya oluşturuluyor. )

PHP- Kodu:
<?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- Kodu:
$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.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Alıntı ile Cevapla
Cevapla

Go Back   Payidar.NET - Bilgi ve Paylaşım Forumu > Internet > Web Master Dünyası


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Konu Seçenekleri
Gösterim Modu

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Hizli Erisim

Benzer Konular
Konu Yazar Forum Cevaplar Son Mesaj
Türbanlı Porno Nasıl Yapılır? BaHTiYaR Türkiye'nin Sorunları 33 25.08.08 10:11
photoshop ta gif nasıl yapılır?? DAFNE Yardım Merkezi 2 28.10.06 23:26