Wer ist online?
Wer ist online ist ein kleiner PHP Script, der die aktuellen Besucher der letzten x Minuten anzeigt. Bots / Spider / Robots werden dabei heraus gefiltert (soweit bekannt).
Den Script kann man ohne größere Probleme in eine – mittels PHP geschriebene – Webseite einbauen.
Voraussetzungen: PHP & MySQL
Features: Festlegung wie lange ein Besucher als Besucher geführt wird. Während dieser festgelegten Zeit wird der Besucher nur einmal gezählt (IP-Sperre). Die Kennungen von Bots / Spider / Robots können in einer Funktion beliebig erweitert werden.
Verbesserungen: Die IP-Sperre von x Minuten finde ich zwar ausreichend, wer es aber genauer haben möchte, könnte das mit Cookies erreichen (wird aber in diesem Tutorial erst mal nicht behandelt).
Vorbereitungen: Als erstes muss unsere benötigte Tabelle in der MySQL Datenbank angelegt werden. Das lässt sich sehr einfach mit phpMyAdmin realisieren.
CREATE TABLE wio ( IP varchar(15) NOT NULL default '', Datum datetime default NULL, UserAgent varchar(150) NOT NULL default '', PRIMARY KEY (IP) ) |
Die Tabelle dient nur als Zwischenspeicher. Es wird nicht beabsichtigt Daten dauerhaft gespeichert.
Codierung:
Hinweis: In diesem Tutorial wird eine Datenbank – Klasse verwendet. Wir verwenden die db_mysql.inc.php , die man sich hier herunterladen kann -> http://phplib.sourceforge.net.
Let’s go:
So einen Script platziert man idealerweise an einer Stelle, die stets neu geladen wird (da eignet sich der Kopf der Webseite (Header) hervorragend, auch der Fuß (Footer) wäre OK.
include_once("db_mysql.inc.php") $user = $_SERVER['HTTP_USER_AGENT']; $online = new DB_Sql(); $online ->query("SELECT COUNT(*) AS Anzahl FROM wio WHERE IP='".$_SERVER['REMOTE_ADDR']."'"); while($online->next_record()){ $zeile = $online->f("Anzahl"); } if($zeile){ $online->query("UPDATE wio SET Datum = NOW() WHERE IP = '".$_SERVER['REMOTE_ADDR']."'"); } else{ $online->query("INSERT INTO wio (IP, Datum, UserAgent) VALUES ('".$_SERVER['REMOTE_ADDR']."', NOW(),'$user')"); } $online->query("DELETE FROM wio WHERE DATE_SUB(NOW(), INTERVAL 15 MINUTE) > Datum"); $online->query("SELECT COUNT(*) as Anzahl FROM wio"); while($online->next_record()){ $gesamtonline = $online->f("Anzahl"); } $online->query("SELECT DISTINCT UserAgent, COUNT(*) as Anzahl FROM wio GROUP BY UserAgent"); while($online->next_record()){ $Agent1 = getUserAgent($online -> f("UserAgent")); $Anzahl = $online->f("Anzahl"); if(($Agent1 != "") && ($Anzahl > 1)){ $Agent .= $Agent1."(".$online->f("Anzahl").") , "; $Spider = $Spider + $Anzahl; } elseif(($Agent1 != "") && ($Anzahl == 1)){ $Agent .= $Agent1." , "; $Spider++; } $AnzahlSpider = $Spider; if(empty($AnzahlSpider)){ $AnzahlSpider = "0"; } } //letztes Kommata entfernen $Agent = substr($Agent,0,strlen($Agent)-2); |
Auf folgende Variablen kann man zugreifen bsp.:
"Insgesamt sind <b>".$gesamtonline."</b> User online, davon <b>".$AnzahlSpider."</b> Spider <hr> $Agent"; |
function getUserAgent($agent){ if(ereg("Googlebot",$agent)){ $Useragent = "<b>GoogleBot</b>";} elseif(ereg("Yahoo! Slurp",$agent)){ $Useragent = "<b>Yahoo! Slurp</b>";} elseif(ereg("cometrics-bot",$agent)){ $Useragent = "<font color=\"#FF0000\"><b>Cometrics Bot</b></font>";} elseif(ereg("AMZNKAssocBot",$agent)){ $Useragent = "<b>Amazon Bot</b>"; } elseif(ereg("Snapbot",$agent)){ $Useragent = "<b>Snapbot</b>"; } elseif(ereg("Mediapartners-Google",$agent)){ $Useragent = "<b>Google-Mediapartner</b>"; } elseif(ereg("Googlebot-Image",$agent)){ $Useragent = "<b>Google-Image Spider</b>"; } elseif(ereg("msnbot",$agent)){ $Useragent = "<b>MSNBot</b>"; } elseif(ereg("WISENutbot",$agent)){ $Useragent = "<b>Looksmart Spider</b>"; } elseif(ereg("Gigabot",$agent)){ $Useragent = "<b>GigaBot</b>"; } elseif(ereg("Ask Jeeves",$agent)){ $Useragent = "<b>Ask Jeeves</b>"; } elseif(ereg("IRLbot",$agent)){ $Useragent = "<b>IRLbot</b>"; } elseif(ereg("Scooter",$agent)){ $Useragent = "<b>Altavista Spider</b>"; } elseif(ereg("W3C_Validator",$agent)){ $Useragent = "<b>W3C Validator</b>"; } elseif(ereg("Exabot",$agent)){ $Useragent = "<b>Exabot</b>"; } elseif(ereg("crawleradmin.t-info@telekom.de",$agent)){ $Useragent = "<b>T-Info Crawler</b>"; } elseif(ereg("HenryTheMiragoRobot",$agent)){ $Useragent = "<b>MiragoBot</b>"; } elseif(ereg("NimbleCrawler",$agent)){ $Useragent = "<b>NimbleCrawler</b>";} elseif(ereg("msnbot/2.0b",$agent)){ $Useragent = "<b>MSNBot</b>";} elseif(ereg("Speedy Spider",$agent)){ $Useragent = "<b>Speedy Spider</b>"; } elseif(ereg("Yandex",$agent)){ $Useragent = "<b>Yandex Spider</b>"; } elseif(ereg("DotBot",$agent)){ $Useragent = "<b>DotBot</b>"; } return $Useragent; } |
Die Funktion „getUserAgent($agent)“ würde ich in einer Datei auslagern, wo auch andere Funktionen liegen. Mittlerweile gibt es sehr viele Bots / Spider / Robots mehr.
Viel Spaß damit!
Das Tutorial wird in Kürze zum Download bereitgestellt.