PHP Skript: User Benutzer Online anzeigenUngebrochen populär sind Scripts die über die derzeitige Auslastung einer Website Auskunft geben. Sie zeigen an, wie viele Besucher sich gerade auf einer Webseite aufhalten. Doch wie funktioniert das, welche Möglichkeiten gibt es?

Die einfachste Lösung funktioniert über eine Textdatei auf dem Server. In dieser wird die IP des Besuchers sowie ein Zeitstempel hinterlegt wird. Mit jedem Aufruf des Skriptes wird untersucht, ob die IP des Besuchers bereits in der Textdatei eingetragen ist und ob der Eintrag veraltet ist. Ist der Besucher neu auf der Seite, wird er neu in die Datei eingetragen – ist er bereits eingetragen gewesen, wird der Zeitstempel bei seinem Eintrag in der Datei aktualisiert.

Man kann also niemals wirklich genau sagen, wie viele Benutzer Online sind – man kann jedoch feststellen, dass in einem bestimmten Zeitraum so und soviel Benutzer Online waren – bis die Einträge eben veraltet sind und gelöscht werden.

Hier sehen Sie ein kleines PHP-Skript, über welches genau diese Funktion ermöglicht wird. Es gibt jedoch mitunter Probleme, wenn PHP im Safemode läuft. Es kann dann zu Konflikten kommen, wenn die Datei zum Beispiel gleichzeitig vom Skript bearbeitet wird. Das Skript erzeugt die Datendatei besucher.txt automatisch beim Aufruf.

<?php
$daten = "besucher.txt";
$time = time();
$ip = $_SERVER['REMOTE_ADR'];
$ablaufzeit = $time - "300"; //Ablaufzeit - die Bedingung, die für veraltete Einträge gelten muss

$pruefung = @file($daten); //Überprüfung der Zeit
while (list ($line_num, $line) = @each ($pruefung)) {
$zeiten = explode("&&",$line);
if($zeiten[0] <= $ablaufzeit) {
$fp = fopen( "$daten", "r" );
$contents = fread($fp, filesize($daten));
fclose($fp);
$line=quotemeta($line);
$string2 = "";
$replace = ereg_replace($line, $string2, $contents);
$fh=fopen($daten, "w");
@flock($fp,2);
fputs($fh, $replace);
@flock($fp,3);
fclose($fh);
}
}
$ippruefung = @file($daten); //Überprüfung der IPs
while (list ($line_num, $line) = @each ($ippruefung)) {
$ips = explode("&&",$line);

if($ips[1] == $ip) {
$fp = fopen( "$daten", "r" );
$contents = fread($fp, filesize($daten));
fclose($fp);
$line=quotemeta($line);
$string2 = "";
$replace = ereg_replace($line, $string2, $contents);
$fh=fopen($daten, "w");
@flock($fp,2);
fputs($fh, $replace);
@flock($fp,3);
fclose($fh);
}
}
$fp = fopen("$daten", "a+");

flock($fp,2);
fputs ($fp, "$time&&$ip&&\n"); //neuer Eintrag
flock($fp,3);
fclose ($fp);
$anzahldaten = file($daten);
$anzahl = count($anzahldaten);
echo "User online $anzahl";
?>

Die sicherste Lösung erhält man über Verwendung einer MySQL-Tabelle. Dort werden jeweils die Daten der Benutzer hinterlegt, die sich gerade auf der Seite befinden. Dazu muss nur eine einfache Tabelle angelegt werden – user_online zum Beispiel.

In ihr wird die IP und ein Zeitstempel hinterlegt – die Tabelle sieht wie folgt aus:

Screenshot

Eine solche Tabelle können Sie über das SQL Statement

CREATE TABLE `useronline` (
`ip` VARCHAR( 15 ) NOT NULL ,
`zeit` INT NOT NULL
);

erzeugen.

Bei diesem Skript wird die ganze Arbeit eigentlich über einfache SQL-Statements erledigt. Zunächst werden veraltete Besucher, die innerhalb der definierten Zeitspanne keine Anfrage an den Server gesendet haben aus der Datenbank gelöscht. Dies geschieht über die DELETE-Anweisung. Über den UPDATE-Befehl wird der in der Datenbank hinterlegte Timestamp für einen Benutzer der innerhalb der Zeitspanne eine andere Seite besucht hat erneuert. Sollte der Besucher neu auf der Seite sein, wird über die INSERT-Anweisung ein neuer Datenbankeintrag erzeugt.

Über die SELECT-Anweisung schließlich wird die Anzahl der Einträge in der Datenbank ermittelt und dann ausgegeben.

<?php

$dbhost="host";
$dbuser="benutzername ";
$dbpass="passwort";
$dbname="datenbank name";

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

$zeitspanne = 300; //Sekunden
$ip = $_SERVER['REMOTE_ADDR'];

//veraltete Einträge löschen
mysql_query("DELETE FROM useronline WHERE zeit < ".time()."");

//Zeitpunkt erneuern
mysql_query("UPDATE useronline SET zeit = '".(time()+$zeitspanne)."' WHERE ip='".$ip."'");

// ist der Besucher noch nicht eigetragen, so wird ein neuer Eintrag erzeugt.
if(!mysql_affected_rows()) {
mysql_query("INSERT INTO useronline (ip,zeit) VALUES ('$ip ','".(time()+$zeitspanne)."')");
}
// die Zahl der Online-User ermitteln.
$result = mysql_query("SELECT count(*) FROM useronline");
echo mysql_result($result,0)." User online";
?>

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: