PDO ile Basit Analitik Sistemi Yazmak
PDO ile Google Analitik sistemi gibi sitedeki son 30 dakikada bulunan ziyaretçilerin verilerini tutabiliriz. Bunun için olabildiğince basit ve optimize bir sistem yazmak, mevcut site altyapısını etkilememek adına önemlidir. Fakat Google Analitik gibi, bot, makine ip6 veya ip4 ayırt etmeden ve sitede belirli bir süre geçirdikten sonra saymaya başlamadan düz mantık, siteyi ziyaret eden her şeyin son 30 dakikadaki etkinliğini tutacağız.
Dediğim gibi amaç mantıken CRUD işlemlere örnek olması ve PHP tarih yapısının kavramasına yardımcı olmasıdır. Bu örnekten yola çıkarak çok daha gelişmiş (Yukarıda saydığım her şey) versiyonu üretilebilir. Mesela bütün arama motoru örümceklerinin ip adresleri internette yer almaktadır. Bir fonksiyon yazılır ve bu ip adresleri bir txt dosyasına eklenir, ziyaretçinin ip adresi ile karşılaştırıp TRUE değeri döndürdüğünde veritabanına kayıt işlemi yapılabilir.
Böylece ziyaretçinin örümcek olmadığı ortaya çıkar. Bir Javascript kodu ile ziyaretçi siteye girdikten 10 dakika sonra çalışacak bir api eklenir ve veri 10 saniye durduktan sonra ziyaretçi, veritabanına işlenebilir. Biz şimdi basit haliyle bu sistemi oluşturalım.
İlk olarak basit bir mysql veri tablomuzu oluşturalım
ip_adresi (Varchar 100) | zaman (int) |
Herhangi bir otomatik atanan id değerine gerek duymuyorum. Hem yer kaplamamalı hem de tablo sürekli doldur boşalt yapacağı için gereksiz. Şimdi bize 2 adet değer gerekiyor. İlk olarak ziyaretçinin ip adresini almak için bir fonksiyon kullanalım. Bunun için burada yer alan fonksiyonu kullanabilirsiniz.
//ip alma fonksiyonu ile ip adresini değişkene atayalım:
$IP = IpAl();
Zamanı bulalım ve bu zamanı int değerine çevirelim.
//Zamanı Yıl-Ay-Gün Saat-Dakika-Saniye şeklinde (Timestamp) olarak alalım
$tarih=date("Y-m-d H:i:s");
//int değerine dönüştürelim.
$zaman=strtotime($tarih);
İki verimizde artık elimizde. Fakat bize tabloda olmayacak ama sistemi yazarken 30 dakika içerisinde gerçekleşeceği için, şuanki zamandan 30 dakika önce ve sonrayı veren iki tarih daha gerekli. Hemen onlarıda yukardaki şekilde yapalım.
$otuzdakikasonra=strtotime(date("Y/m/d H:i:s", strtotime("+30 minutes")));
$otuzdakikaonce=strtotime(date("Y/m/d H:i:s", strtotime("-30 minutes")));
Bütün gerekli veriler elimizde. Şimdi PDO ile sistemi kurabiliriz.
//Anlık Hit Takibi:
$IP=IpAl();
$zaman=strtotime(date("Y-m-d H:i:s"));
$otuzdakikasonra=strtotime(date("Y/m/d H:i:s", strtotime("+30 minutes")));
$otuzdakikaonce=strtotime(date("Y/m/d H:i:s", strtotime("-30 minutes")));
//Önce Kontrol edelim, veritabanında son 30 dakika içerisinde bu ip adresi eklenmiş mi?
$suankontrol=$db->prepare('SELECT * FROM anlik_hit WHERE ip_adresi=? AND zaman < ?');
$suankontrol->execute(array($IP,$otuzdakikasonra));
$suandurum=$suankontrol->rowCount();
//Eklenmemişse veriyi ekletelim.
if(!$suandurum):
$ekle=$db->prepare('INSERT INTO suanlik_hit SET ip=?,time=?');
$ekle->execute(array($IP,$zaman));
endif;
//Geçmişi Sildirelim sonuçta son 30 dakika kaydı tutuyoruz.
$sil=$db->prepare('DELETE FROM suanlik_hit WHERE time < ?');
$sil->execute(array($otuzdakikaonce));
//Şimdide son 30 dakikadaki kullanıcı sayısını bastıralım ekrana.
$suan=$db->prepare('SELECT * FROM suanlik_hit WHERE time > ?');
$suan->execute(array($otuzdakikaonce));
$SUAN_ANLIK=$suan->rowCount();
echo 'Son 30 dakika içerisindeki toplam ziyaret: '.$SUAN_ANLIK
//Anlık Hit Takibi Bitişi:
Böylece ekrana son 30 dakikadaki ziyaretçi sayısını yazdırabiliriz.
Son yorumlar