Anzahl der aktuellen Ansichten einer Seite wiedergeben

Hallo liebe Community,

meine Seite XY schauen sich viele Leute an. Nun möchte ich einen Counter der mir in Echtzeit anzeigt wieviele Betrachtungen gerade just in diesem Moment die Seite XY hat. Das ganze soll auch funktionieren wenn die Seite über einen iframe betrachtet wird.

Wie lässt sich dass realisieren? JavaScript? Wichtig ist mir dass die Daten in Echtzeit angezeigt werden oder ein reload von einer halben Sekunde. (würde sowas natürlich auf einem anderen Server laufen lassen).

Liebe Grüße

MaxT :wink:

Du kannst mit PHP festhalten, wann welche IP auf eine Seite
zugegriffen hat.
Wie lange sich die Leute den Kram dann ansehen, ist nicht
direkt feststellbar.

Nun könnte man (Skriptinterpretation vorausgesetzt) per AJAX
andauernd im Sekundentakt Anfragen an den server schicken,
um sowas zu realisieren, aber zum einen bekommt man dann
allenfalls die Anzahl der Leute, die bereit sind, sowas zu erlauben,
zum anderen ist das ein bösartiger Angriff auf die Resourcen des
servers, der all diese Anfragen bearbeiten muß. Das ist deutlich
übler als ein chat, insofern solltest du das besser lassen ;o)
Hinsichtlich der Relevanz der Information sollte das Skript (wie
auch bei der abgespeckten und harmlosen PHP-Variante) direkt in
der fraglichen Datei stecken und nicht in einer anderen, darin
eingebetteten Datei.

Statistisch sind die Daten nicht allzu relevant, denn wenn jemand
merkt, daß sein browser unmotiviert permanent was anfragt, aber
sie nie was ändert, wird er das für die betreffende Seite ganz
schnell deaktivieren. Andere erlauben das von vorneherein nicht
und werden gar nicht erst erfaßt.

Wäre es einfacher die aktuelle Besucherzahl anzuzeigen wenn man eine durschnittliche Verweildauer nimmt? Wäre das Problem mit den ständigen Anfragen an die Besucher zumindest gelößt.

Hi,

Forensysteme (wie hier phpbb) zeigen ja auch nur die User an, die in den letzten 5 Minuten mal da waren… demnach könntest du dennoch eine relativ aussagekräftige Statistik führen, ohne jedoch den Server zu sehr zu stressen.

Das wäre dann eine relativ einfach Anwendung von PHP.
Bei jedem Aufruf müßtest du dann z.B. die Unix-Zeit des Zugriffs
in einer Liste abspeichern.

Zur Auswertung guckst du dir dann an, wieviele Einträge in den
letzten 5 Minuten getätigt worden sind und löscht alle älteren
Einträge aus der Liste.

Solltest das dann allerdings in der Ausgabe auch eher formulieren
als ‘Zugriffe in den letzten 5 Minuten’ und nicht ‘aktuelle
Besucherzahl’ - denn es können ja auch mehrere gleichzeitig auf
einen Monitor gucken oder bereits nach 5 Sekunden aufgrund
von Schock oder Desinteresse schon wieder verschwunden sein ;o)

Benutze nun folgenden Code:

[code]<?php
$daten = “besucher.txt”;
$time = time();
$ip = getenv(“REMOTE_ADDR”);
$ablaufzeit = $time - “300”;
$pruefung = @file($daten);

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);
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”);
flock($fp,3);
fclose ($fp);
$anzahldaten = file($daten);
$anzahl = count($anzahldaten);
echo $anzahl." User online";
?> [/code]

Funktioniert wunderbar. Als Zähler einfach die Ausgabe am Ende weglassen und dort wo die Besucherzahl ausgegeben werden soll alles. Da die aktuellen Besucher in einer seperaten Datei abgespeichert werden lässt sich auch gut von überall aus darauf zugreifen.

Mit freundlichen Grüßen

MaxT :wink: