Wer ist online?

wio

wio

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.