Besucherstatistik mit PHP - Die Klasse
Erstellt am 11.02.2009 um 17:52 Uhr von sim4000
Nun noch eine kurze Übersicht der Funktionalitäten der Statistik Klasse.
Inhalte dieses Artikels
Code
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | /*** Klasse zum erfassen und auswerten der Statistiken by Christian Blechert ***/ class counter { private $ip; private $agent; private $referrer; private $url; function __construct($log=false) { $this->ip = $_SERVER['REMOTE_ADDR']; $this->agent = $_SERVER['HTTP_USER_AGENT']; if(isset($_SERVER['HTTP_REFERER'])) { $this->referrer = $_SERVER['HTTP_REFERER']; } else { $this->referrer = ""; } $this->url = substr($_SERVER['REQUEST_URI'], strrpos($_SERVER['REQUEST_URI'], "/")+1); if($log) $this->insert(); } function insert() { $db = registry::get('mysql'); $db->mysqlQuery("UPDATE mod_counter_log SET hits=hits+1 WHERE ip='".$this->ip."' AND dtime>DATE_SUB(NOW(), INTERVAL 1 DAY)"); if($db->mysqlAffectedRows()<1) { $db->mysqlQuery("insert into mod_counter_log set dtime=NOW(), ip='".$this->ip."', useragent='".$this->agent."', url='".$this->url."', referrer='".$this->referrer."', hits=1"); } } function deletedata() { $db = registry::get('mysql'); $db->mysqlQuery("update mod_counter_log set ip='000.000.000.000' where dtime<DATE_SUB(NOW(), INTERVAL 24 HOUR)"); $complete_log = $db->mysqlArray("select count(count_id) as cntr from mod_counter_log where dtime<DATE_SUB(NOW(), INTERVAL 30 DAY)"); if($complete_log[0]>0) { $db->mysqlQuery("update mod_counter set value=value+".$complete_log[2][0]['cntr']." where var='complete'"); $db->mysqlQuery("delete from mod_counter_log where dtime<DATE_SUB(NOW(), INTERVAL 30 DAY)"); } } function getdata() { $db = registry::get('mysql'); $hour_log = $db->mysqlArray("select count(count_id) as cntr from mod_counter_log where dtime>DATE_SUB(NOW(), INTERVAL 1 HOUR)"); $day_log = $db->mysqlArray("select count(count_id) as cntr from mod_counter_log where dtime>DATE_SUB(NOW(), INTERVAL 1 DAY)"); $week_log = $db->mysqlArray("select count(count_id) as cntr from mod_counter_log where dtime>DATE_SUB(NOW(), INTERVAL 7 DAY)"); $month_log = $db->mysqlArray("select count(count_id) as cntr from mod_counter_log where dtime>DATE_SUB(NOW(), INTERVAL 30 DAY)"); $complete_log = $db->mysqlArray("select count(count_id) as cntr from mod_counter_log"); $hits_log = $db->mysqlArray("select sum(hits) as cntr from mod_counter_log"); $counter = $db->mysqlArray("select * from mod_counter where var='complete'"); $return = array(); $return['hour'] = $hour_log[2][0]['cntr']; $return['day'] = $day_log[2][0]['cntr']; $return['week'] = $week_log[2][0]['cntr']; $return['month'] = $month_log[2][0]['cntr']; $return['complete'] = ((int)$complete_log[2][0]['cntr']+(int)$counter[2][0]['value']); $return['hits'] = $hits_log[2][0]['cntr']; return $return; } } |
Die Klasse erfasst beim Besuch der Seite die IP Adresse des Besuchers, die Browserkennung, den Referer und die URL, die Aufgerufen wurde.
Mit der Methode insert() werden dann die Informationen in die Datenbank geschrieben. Falls für diesen Besucher schon ein Datensatz vorhanden ist, wird der hit-Counter um einen hochgezählt.
Mit der Methode deletedata() werden bei allen Datensätzen die älter als 24 Stunden sind, die IP Adressen gelöscht und alle Datensätze die älter als 30 Tage sind, werden komplett gelöscht.
Mit getdata() werden die Besucherzahlen für die Stunde, den Tag, die Woche, den Monat, Gesamt und die Hits der letzten 31 Tage in einem Array geliefert.




