Turbo DB V-2 Php Tabanlı NoSQL Database Ayrıca Sphinx Full Text Arama Motoru

(2014-10-14 22:13)

Turbo DB Eklentisi Php Tabanlı NoSQL Database Ayrıca Sphinx Full Text Arama Motoru 

  •   import($tablo,$sorgu) metodu ile Codeigniter frameworküyle bağlandığınız hangi veritabanı ise onun query metoduna gönderilmek üzere ilk parametre olarak saklanan sorgunun dosya adı mantıken tablo adı olacak şekilde tablo adı, 2. parametresi ise full sql komutu olacak şekilde gönderilerek databaseden gelen dataların array() halini alıp ful metin olacak şekilde ister serialize(), isterse json_encode() ile saklayabilirsiniz.
    public function import($tablo,$sorgu){
            #dataların yedeklendiği kısım
            $query=$this->db->query($sorgu);
            $query=$query->result_array();
            if(count($query)>0){
                    $data=serialize($query);
                    $filepath=DBPATH.$tablo.'.php';
                    $dosya=fopen($filepath, 'r');

                    if ( write_file($filepath, $data)){
                            return true;
                    }else{
                        return false;
                    }

            }else{
                    return false;
            }
    }
  • save($tablo,$array) metodu ile de sql sorgusu ile metot iççerisinde uğraşmadan tablo adı 1. parametre, array() data 2. parametre olarak gönderilerek de saklanması mümkündür.
    public function save($tablo,$array=array()){
        $data=serialize($array);
        $filepath=DBPATH.$tablo.'.php';
        $dosya=fopen($filepath, 'r');

        if ( write_file($filepath, $data)){
            return true;
        }else{
            return false;
        }
     }
  • get($tablo) metodu ilede saklamış olduğumuz mevcut datların okunma işlemi yapılır biz eğer serialize() ederek data saklamış isek bunu unserialize() şeklinde okur array() data elde ederiz. Eğer json_encode() ile sakladıysak bunu json_decode() ile çözerek array() datayı alıp foreach ile gösterime alabiliriz.
    public function get($tablo){
            #yedeklenen dosyanın okunduğu kısım
            $filepath=DBPATH.$tablo.'.php';
            if(file_exists($filepath)){
                    $data = read_file($filepath);
                    $data = unserialize($data);
                    return $data;
            }else{
                    return false;
            }
    }
 
  • get_where($tablo,$where) metodu ile koşullu sorgulama yaparak saklanan tablo adı 1. parametre, where koşulu array('menu_id'=>1) şeklinde array() olarak gönderilebilir veya metot içerisindeki where() metoduna da gönderilebilir. Yalnız sorgulama eğer login işlemi içinse  class içerisinde $netice, $true  isminde public string değer $result=array() değişken tanımlanmalıdır. Metot içerisindeki sorgulama sonucu $netice ile true veya false olarak döner $result ise where koşuluna uyan dataları array() olarak gönderir
        public function get_where($tablo,$where=array()){
        $array=$this->get($tablo);
        $sayac=0;
        foreach($array as $data) {
                #datalar parse edildi
                $true=0;
                foreach($where as $name=>$value){
                    #arama yapılacak sütular çekildi                  
                    if ($data[$name]==$value){
                        $sonuclar[]=$array[$sayac];
                        $true=$true+1;
                    }
                }
                if(count($where)==$true){
                    $this->netice=true;
                    $this->result[]=$array[$sayac];
                }else{
                    $this->netice=false;
                }
            $sayac=$sayac+1;
        }
        return $sonuclar;
    }
 
  • search($array,$sutunlar,$search) metodu ile saklanan data içerisinden Full text olarak Sphinx gibi arama yapabilirsiniz. 1. parametre array() saklanan arama yapılacak data, 2. parametre arama yapılacak sütunlar array('adi','soyadi','aciklama') gibi , 3. parametre ise aranacak kelimedir.
    public function search($array=array(),$sutunlar=array(),$search){
            #iç içe 2 arrayde çalışacak
        $sayac=0;
        $silinsin=array(''); #silinecek array() tipleri
        foreach($array as $value) {
            #datalar parse edildi
            foreach($sutunlar as $kolon){
                #arama yapılacak sütular çekildi                
                if (stristr($value[$kolon],$search)){
                    $sonuclar[]=str_replace($search,''.$search.'',$array[$sayac]);
                    unset($array[$sayac]);#bulunan data array() den çıkarıldı
                }
            }  
            $sayac=$sayac+1;
        }
        //pa(array_diff($sonuclar));
        return array_diff($sonuclar,$silinsin);
    }
 
  • insert($tablo,$array) metodu V2 de güncellenmiştir._INIFILE dosyasında saklanan tablo ayar dosyasına göre kontrolden geçtikten sonra prepare ile sütun kontolü yapılıp, Saklanan  Turbo db ye veri eklemesi yapılır. 1. parametre tablo adı, 2. parametre array() olarak gönderilen kaydedilecek dataları ifade eder. 
    public function insert($tablo,$array=array()){
        $security=$this->controller($tablo,$array);#ini file ile tablo bilgisi sorgulandı
        if($security){
            $array=$this->prepare($tablo,$array);
            $data=$this->get($tablo);
            $data[]=$array;
            $save=$this->save($tablo,$data);
           // var_dump($save);
            if($save){
                return true;
            }else{
                return false;
            }
        }else{
            return $security;
        }
    }
   
  • prepare($tablo,$data) metodu V2 de gelmiştir. İşlevi tabloya ekleme yaparken sütun sayılarının ilk datadaki gibi eşit olacak şekilde ya boş olarak yada id ise otomatik sayı alarak kaydedilmesini sağlar. 
    
    public function prepare($tablo,$data){
        #insert esnasında sütun data kontrolü yapıldı
        #$data burada insert metoduna eklenmek için gönderilen datadır
        $alanlar=$this->desc($tablo); 
        $array=$this->get($tablo);
        foreach ($alanlar as $sutun) {
            # code...
            foreach ($data as $veri) {
            # code...
                if(!$veri[$sutun]){
                    if(strstr($sutun,'id')){
                        $veri[$sutun]=$this->set_id($array);
                    }else{
                        $veri[$sutun]='';
                    }
                }
            }
        }
        return $data;
     } 
  • get_ini($tablo,$tip='Z') metodu ile bu versiyona has bir özellik olan Turbo DB ini file dosyası olan define("_INIFILE", DBPATH."tdb_ini_file") olarak define edilmeli Appdata klasörümüz içerisinde bulunmalıdır. Bu metodun 1. parametresinde bahsettiğimiz ini file dosyasında saklanan data modeli tablo ve tablonun ilgili özelliği mesela zorunlu alanları otomatik sayısı gibi Primary key ile array dizide tablo ve key şeklinde saklanıp daha sonradan bu ayarlar çağrılıp kullanılabilir. Bu versiyonda sadece saklanan kısım zorunlu alan olarak tek boyutlu dizide zorunlu alan karşılaştırılması yapılmıştır.Bu metot ise ayarları çağıran array() döndüren metotdur.
    public function get_ini($tablo,$tip='Z'){
        #ini file içinde saklanan tablonun hangi özelliği istenirse array() olarak döner
        $read_file=$this->get(_INIFILE);
        //$data=$read_file[$tablo][$tip];
        $data=$read_file[$tablo];
        return $data;
    }

     
  • validation($data,$control) metodu ile _INIFILE dosyasında saklanan ilgili tablonun kontrol edilecek datasının denetlendiği metotdur. 1. parametre insert edilecek olan data, 2. parametre get_ini() metodundan gelen array() control datasıdır.
    public function validation($data,$control){
        #data insert edilecek array()
        #control ise get_ini den gelen array() validation
        $sayac=0;
        $error=array();
        foreach ($data as $name => $value) {
            # code...
            foreach ($control as $alan) {
                # code...
                if($alan==$name){
                    $sayac=$sayac+1;
                }else{
                    $error[]=$alan;
                }
            }
        }
        if($sayac==count($control)){
            return true;
        }else{
            return $error;
        }
    }

        
  • controller($tablo,$data,$tip="Z") metodu ile validation ve get_ini metotları harmanlanıp kontrol mekanizmasından geçirilerek true yada hatalı kısımları gönderir.1. parametre tablo adı, 2. parametre insert metoduna gönderilen data, 3.parametre bu versiyonda zorunlu alan olarak belirtilen statik tek boyutlu dizi tipini ifade eder gönderilmesi zorunlu değildir.
        public function controller($tablo,$data,$tip="Z"){
        #tablo ilgili tablo 
        #data insert veya update edilecek data
        #tip saklanan datanın özellik keyi
         $c
        $validati 
        if($validation){
            return true;
        }else{
            return $validation;
        }
    }
  • limit($array,$startnum,$endnum) metoduyla gösterilmek istenen sonular pageing olarak limit koyma olanağı sağlar. 1. paramatresi array() data, 2. parametresi başlangıç limit değeri, 3. parametresi bitiş limit deerini ifade eder.
    public function limit($array,$startnum,$endnum){
        #belli aralıktaki dataları listeler
        //$data = implode(' ', array_slice($array, $startnum, $endnum-$startnum));
        $data = array_slice($array, $startnum, $endnum-$startnum);
        return $data;
    }

 

  • where($array) metodu ile update, delete ve get_where metotlarına da gönderilebilecek array() koşulu ifade eder. array('adi'=>'Birol','soyadi'=>'Kahraman') şeklinde kullanılır.
    public function where($array){
        $this->where=$array;
     }
  • update($tablo,$sutunlar,$where) metodu ile saklanan dataların üzerinde güncelleme yapılır. 1. parametre tablo adı, 2. parametre güncellenecek alanlar, 3. parametre ister where metodundan isterse buradan array() olarak koşul olarak gönderilebilir
     
        public function update($tablo,$sutunlar=array(),$where=array()){
        if(count($where)==0){
            $where  =  $this->where;
        }
        /* 
           $tablo= saklanan dosya adı , 
           $sutunlar= güncelleme yapılacak alan arrayi , 
           $where= where koşulunda sorgulanacak array sütunlar , 
           $text= where koşulundaki sütunlarda aranacak değer
        */
        $array= $this->get($tablo);
        $bul=$this->get_where($tablo,$where);
        $bulunan=$this->result;
        $sayisi=count($bulunan);
        #güncelleme yapılacak alanlar ayrıldı
        foreach ($sutunlar as $name => $value) {
           
            $sayac=0;
            for ($i=0; $i <$sayisi ; $i++) { 
                # code...
                $bulunan[$i][$name]=$value; # bulunan datanın güncellemesi yapıldı
                $id=$this->get_id($array,$where); # Güncellenen kaydın saklandığı array data id si alındı
                
                $array[$id[$i]]=$bulunan[$i]; # saklanan arrayde güncelleme işlendi
            }
        }       
        $save=$this->save($tablo,$array); # son hali save edildi
        if($save){
            return true;
        }else{
            return false;
        }
    }
 
  • delete($tablo,$where) metodu ile saklanan datalar üzerinde silme işlemi yapılır.
    public function delete($tablo,$where=array()){
        if(count($where)==0){
            $where  =  $this->where;
        }
        $array= $this->get($tablo);
        $id=$this->get_id($array,$where); # silinecek kaydın id si alındı
        unset($array[$id]); # silinmesi istenen array silindi

        $save=$this->save($tablo,$array); # son hali save edildi
        if($save){
            return true;
        }else{
            return false;
        }
    }
 
  • join($ilk,$son,$where) metodu ile ilk ve son array datalarda where koşuluna göre karşılaştırma yapılır. Array sonuç döner. where koşulu array olarak array('ilk_array_alani'=>'son_array_alani') şeklinde sıralı gönderilmeli!
    public function join($ilk=array(),$son,$where=array()){
        /*
        $ilk=ilk array,
        $where = karşılaştırılacak alanlar array('ilkalan'=>'sonalan')
        */
        $true=0;
        foreach ($where as $ilki=>$sonu) {
            # code...
            if($ilk[$ilki]==$son[$sonu]){
                $id=array_search($ilk[$ilki], $ilk);
                $sonuc[]=$ilki[$id];
                $true=$true+1;
            } 
        }
                   
        if(count($where)==$true){
            $this->netice=true;
        }else{
            $this->netice=false;
        }        

        return array_unique($sonuc);
    }
 
  • set_id($data) metoduyla array olarak saklanan datalara otomatik sayı mantığı ile id ataması yapar
    public function set_id($data=array()){
        $say=count($data);
        $sayi=$say+1;
        return $sayi;
    }
 
  • insert_id($data) metodu ile ekleme yapılan datanın id alınır.
    public function insert_id($data=array()){
        $sayi=count($data);
        return $sayi;
    }
 
  • get_id($array,$where) metoduyla güncelleme ve silme işleminde kullanılmak üzere ilgili datanın array id alınır.
    
    public function get_id($array=array(),$where=array()){
        /*
            $array = saklanan datanın array hali,
            $where = arama yapılacak alanlar,
            $text = aranan değer.
        */
        $sayac=0;
        foreach($array as $data) {
                #datalar parse edildi
                foreach($where as $name=>$value){
                    #arama yapılacak sütular çekildi                    
                    if ($data[$name]==$value){
                        $sonuc[]=$sayac;
                    }
                }  
                $sayac=$sayac+1;
        }
        return $sonuc;
    }
 
  • desc($tablo) metodu ile tablo bilgisi alınır. (Sütun olarak)
    public function desc($tablo){
        #tablo sütun bilgilerini gönderir
        $array= $this->get($tablo);
        foreach ($array as $value) {
            foreach ($value as $name => $key) {
                $sonuc[]=$name;
            }
        }
        return array_unique($sonuc);
    }
 
  • alter($tablo,$alan) ile ilgili dataların array kalıbına sütun eklemesi yapılır. alanlar array olarak array('menu_id','kayit_tarihi');
    public function  alter($tablo,$alan=array()){
        #tabloya sütun ekler
        $array= $this->get($tablo);
        $sayac=0;
        foreach ($array as $value) {
            foreach ($value as $name => $key) {
                foreach ($alan as $kolon) {
                    if($name!=$kolon){
                        $array[$sayac][$kolon]='';
                    }
                }
            }
            $sayac=$sayac+1;
        }
        $save= $this->save($tablo, $array);
        return true;
    }
 
  • drop_alter($table,$alan) metodu ile eklenmiş alanlar veya silinmek istenen saklanan datadaki array alanlar drop_alter metodu ile silinir. Alanlar array olarak array('menu_id','kayit_tarihi'); olarak gönderilir.
    public function drop_alter($tablo,$alan=array()){
        #tablodan sütun kaldırır
        $array= $this->get($tablo);
        $sayac=0;
        foreach ($array as $value) {
            foreach ($value as $name => $key) {
                foreach ($alan as $kolon) {
                    if($name==$kolon){
                        unset($array[$sayac][$kolon]);
                    }
                }
            }
            $sayac=$sayac+1;
        }
        $save= $this->save($tablo, $array);
        return true;
    }
 
  • drop($table) metodu ilgili saklanan datanın silinmesini sağlar
    public function drop($table){
        $file_path=DBPATH.$table.'.php';
        if(file_exists($file_path)){
            if(unlink($file_path)){
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
      }

Kullanım Notları: 

* Codeigniter Framewoküne uyumlu olarak çalışır ,
* Application Dizininde Appdata isimli klasör açılmalı ,
* Define ile index.php de path edildiği dizin DBPATH olarak isimlendirilmeli define("DBPATH",FCPATH."application/Appdata/"); ,
* Yazma ve okuma izinleri ayarlanmalı
* Helper class ından dosya işlemleri için "file" çağrılmalı ve write_file metodundan fopen kısmı ya kapatılmalı yada return değerinin kapatılması gerekmektedir.
* Güvenlik için Appdata klasörünüze .htaccess dosyası açıp içine " Denny from all " ile http isteklerini engellemeniz daha güvenli olacaktır.
* Bağış Yapmak Çalışmalarımıza Katkıda Bulunmak İsterseniz buraya tıklayınız
* Direkt İndirme Linki https://yadi.sk/d/-CnevqIfbjfzw

Turbo DB CEO = Birol Kahraman - Yazılım Geliştirici (Software Developer)
İletişim : info@birolkahraman.com
Destek : support@birolkahraman.com