Besucher, User online ermitteln und anzeigen

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”;
?>


This entry was posted in PHP. Bookmark the permalink.

One Response to Besucher, User online ermitteln und anzeigen

  1. hannes says:

    super.
    vielen dank für das script.
    es scheint zu funktionieren

    ++
    super sache

Leave a Reply

Your email address will not be published. Required fields are marked *