Bugün bir arkadaşımın patronuyla iddialaşması üzerine beni de gaza getirmesi sebebiyle online ziyaretci sayısını bildiren bir betik yazmamı istedi. Bunu SESSION ile yapmamı istedi ama bu sessionla olacak bir iş değildi. Patronu da MySQL kullanımına izin vermeyince farklı bir veritabanı kullandık. Bu veritabanı SQLite idi. Kendisi php 5 ile gelen içerisine sql veritabanı motoru enjekte edilmiş c kütüphanesi olarak bilinir.Madem ki mysql istemiyordu bende sqlite ile yapayım dedim ve başladım ufak bir betik yazmaya ve ortaya güzel bir nesne çıktı. SQLite hız vs açısından pek bişey diyemeceğim lakin fazlasıyla tatmin edeceğinden eminim. Ayrıca normal veritabanı olarakda kullanabilirsiniz uygulamalarınıza dahil edebilir yönetebilirsiniz. Gerçi biraz normal sql den farklı ama onu da sitesinden döküman okuyarak çözebilirsiniz.Lafı fazla uzatmadan örneğimize geçelim ve bir hatırlatma ile devam edelim sqlite bir dosya oluşturur bu nedenle oluşacak dosyanın bulduğu dizinin yazma hakları verilmiş olmalıdır.Online Ziyaretçi betiğimiz:* @copyright 2009* @filename online.ziyaretci.php** Online Ziyaretçi Sınıfı v1.0** Kullanımı:** $online_ziyaretci = new OnlineZiyaretci;* echo $online_ziyaretci->ziyaretciGoster();** Copyright 2009 ysfkc.com* Licensed under the GNU General Public License, version 2.* See the file http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt**/class OnlineZiyaretci{const database = ‘onlineziyaretci’;const table = ‘ziyaretciler’;private $query;private $rows;private $db;private $process;private $msg;private $timeout = 1;/*** Yapılandırıcı Fonksiyon* @access public**/public function __construct(){if (function_exists(‘sqlite_open’) === False){exit(‘SQLite Kütüphanesi Yüklü Değil. Lütfen Aktif Ediniz.!’);}else{if (file_exists(self::database) === False){$this->db = new SQLiteDatabase(self::database,0666,$this->msg);if ($this->db === FALSE){exit($this->msg);}else{$this->db->query(“CREATE TABLE “.self::table.” (ip varchar(15),konum varchar(255),zaman integer)”);}}else{$this->db = new SQLiteDatabase(self::database);}}}/*** Zaman Aşımına Uğraşmış Ziyaretçileri Tablodan Siler* @access private**/private function zamanAsimiSil(){$this->process = time() – ($this->timeout * 60);$this->db->query(“DELETE FROM “.self::table.” WHERE zaman < ".$this->process.””);}/*** İpleri Kontrol Eder. Eğer ip kayıtlı değil ise kaydeder kayıtlı* ise zaman alanını şimdiki zaman ile günceller.* @access private**/private function zamanGuncelle(){$this->process = time();$this->query = $this->db->query(“SELECT ip FROM “.self::table.” WHERE ip='”.$_SERVER[‘REMOTE_ADDR’].”‘”);if ($this->query->numRows() == 0){$this->db->query(“INSERT INTO “.self::table.” (ip,konum,zaman)VALUES (‘”.$_SERVER[‘REMOTE_ADDR’].”‘,'”.$_SERVER[‘PHP_SELF’].”‘,'”.$this->process.”‘)”);}else{$this->db->query(“UPDATE “.self::table.” SET zaman='”.$this->process.”‘ WHERE ip='”.$_SERVER[‘REMOTE_ADDR’].”‘”);}}/*** Online ziyaretçi toplamını döndürür* @access private**/private function ziyaretciToplam(){$this->query = $this->db->query(“SELECT ip FROM “.self::table.””);$this->rows = $this->query->numRows();return $this->rows;}/*** Online ziyaretçi sayısını yazdırır* @access public**/public function ziyaretciGoster(){$this->zamanAsimiSil();$this->zamanGuncelle();echo $this->ziyaretciToplam();}}?> Online Ziyaretçi Sınıfımıza Göz Atalım:* Sınıfımız başlatılırken bir dizi işlemden geçiriliyor. Önceliklekullanılmak istenen sunucuda SQLite kütüphanesinin kurulu olupolmadığına bakıyor eğer kurulu ise sınıfımızda belirtilen veritabanıadında bir dosya olup olmadığna bakıyor yok ise veritabanı yaratılıpsonra yaratılan bu veritabanı içine ziyaretçiler adında bir tabloyaratıyoruz. Yok eğer veritabanı mevcut ise veritabanı bağlantısınıgerçekleştiriyoruz. $this->db = newSQLiteDatabase(database,mode,errormsg); diyerek. Burdaki 0666 read-onlymodunda açılması demektir. errormsg ise herhangi bir hata olduğundaerror mesajı bu değişkene aktarılır.* Zaman aşımı sil metotunda ise belirttiğimiz zaman aralığından dahafazla süredir pasif durumda olan kayıtları siliyoruz. Böylecebelirttiğimiz zaman dilimi içindeki online kullanıcıların sayısını eldeediyoruz.* Zaman güncelle metotumuz ile de öncelikle aktif olan ziyaretçilerinip adresleri sistem de kayıtlı mı diye bakıyoruz eğer değil ise sistemezaman olarak time() formatını kullanarak ekliyoruz. Yok sistem de zatenvar ise ip adresini koşul alarak o ip ye ait zaman alanını şimdikizaman ile güncelleyerek sitedeki aktifliğini koruyoruz.* Ziyaretci toplam metotumuzda ise zaten adında anlaşılacağı gibisistemdeki belirttiğimiz zaman aralığını aşmamış kullanıcıların toplamsayısını alıyoruz.* Ziyaretci göster metodunda ise yukarıdaki metotlarımızı bununiçinde çağırıyoruz öncelikle zaman aşımına uğramış ziyaretçilerisiliyoruz ardından zaman güncelle metodunu çağırarak yukardakibahsettiğim olayı gerçekleştirip en sade haliyle aktif ziyaretçileribelirleyip son olarak da ekrana toplam ziyaretci sayısını yazdırıyoruz.Sınıfımızı nasıl kullanacağız bir örnek ile hemen açıklayalım. Öncelikle yapmamız gereken şey betiğimizi açıpconst database = ‘onlineziyaretci’; ve const table = ‘ziyaretciler’;satırlarını kendimize göre değiştiriyoruz. Ardından ise $timeoutdeğerini belirtiyoruz. Standart timeout değer 1 dakikadir Bunlarıyaptıktan sonra aşağıdaki örnekdeki gibi kullanabiliriz.ziyaretciGoster();?> Evet bir online ziyaretçi betiğinin anatomisi bu kadar betiği buradanindirebilirsiniz.