dbCF.de --- Besucherzähler mit PHP und MySQL
Das folgende Skript speichert in einer MySQL-Datenbank, wie viele Besucher man seit irgendwann hat, wie viele gerade auf der Seite sind und das Maximum, wie viele jemals gleichzeitig auf der Seite waren.
Da ich leider keine ordentliche, dauerhaft fehlerfrei laufende Version in die Welt setzen konnte, basiert das Skript nun auf MySQL.
Wer fragen haben sollte, der darf natürlich im Forum nachfragen.
Das Skript in einer Datei (z.B. counter.php) speichern und die Werte im Kopf anpassen.
Entfernen Sie vor dem ersten Durchlauf /* und */ am Anfang des Skriptes. Nach dem ersten Aufruf sollten Sie sie wieder setzen.
Das Skript mit include('counter.php'); einbinden. Die Daten kann man anschließend mit $data_counter['xxx'] ansprechen.
Nach Ablauf des Skriptes stehen dann folgende Variablen zur Verfuegung:
$data_counter['date_start'] - Start der Statistik. Für Formatierung siehe http://php.net/date
$data_counter['hits'] - Hits
$data_counter['visits'] - Besucher
$data_counter['max_online_count'] - Maximale Zahl gleichzeitiger Besucher
$data_counter['max_online_time'] - ...zu diesem Zeitpunkt. Für Formatierung siehe http://php.net/date
$data_counter['online_count'] - Zahl der Nutzer, die aktuell auf der Seite sind
<?php
// Wie lange soll IP als einmaliger Besucher gelten (in Minuten)?
$time_visits=120;
// Wie lange soll IP als aktiver Besucher gelten (in Minuten)?
$time_online=5;
// Name der Tabelle fuer die IPs
$db_name_ips='counter_ips';
// Name der Tabelle fuer die Statistik selber
$db_name_values='counter_values';
/*
mysql_query("CREATE TABLE $db_name_ips (
ip CHAR(15) NOT NULL PRIMARY KEY,
last_action INT)");
mysql_query("CREATE TABLE $db_name_values (
hits INT,
visits INT,
max_online_count INT,
max_online_time INT,
date_start INT)");
mysql_query("INSERT INTO $db_name_values (hits, visits, max_online_count, max_online_time, date_start)
VALUES (0, 0, 1, ".time().", ".time().")");
*/
// Loeschen
mysql_query("DELETE FROM $db_name_ips
WHERE last_action<".(time()-$time_visits*60));
$result=mysql_query("SELECT ip
FROM $db_name_ips
WHERE ip='{$_SERVER['REMOTE_ADDR']}'");
// Zeitstempel aktualisieren
if (mysql_num_rows($result)>0) {
mysql_query("UPDATE $db_name_ips
SET last_action=".time()."
WHERE ip='{$_SERVER['REMOTE_ADDR']}'");
}
// IP mit Zeitstempel eintragen
else {
mysql_query("INSERT INTO $db_name_ips (ip, last_action)
VALUES ('{$_SERVER['REMOTE_ADDR']}', ".time().")");
// Visits erhoehen
mysql_query("UPDATE $db_name_values
SET visits=visits+1");
// Neue Zahl maximaler gleichzeitiger Besucher speichern
$result=mysql_query("SELECT COUNT($db_name_ips.ip) AS c_ip,
$db_name_values.max_online_count
FROM $db_name_ips,
$db_name_values
WHERE $db_name_ips.last_action>=".(time()-$time_online*60)."
GROUP BY $db_name_values.max_online_count");
$data_counter=mysql_fetch_assoc($result);
if ($data_counter['c_ip']>$data_counter['max_online_count']) {
mysql_query("UPDATE $db_name_values
SET max_online_count={$data_counter['c_ip']},
max_online_time=".time());
}
$temp=$data_counter['c_ip'];
unset($data_counter);
}
// Hits erhoehen
mysql_query("UPDATE $db_name_values
SET hits=hits+1");
// Aktuelle Daten auslesen
$result=mysql_query("SELECT *
FROM $db_name_values");
$data_counter=mysql_fetch_assoc($result);
// Zahl Besucher online
$result=mysql_query("SELECT COUNT(ip)
FROM $db_name_ips
WHERE last_action>=".(time()-$time_online*60));
list($data_counter['online_count'])=mysql_fetch_row($result);
?>
Ich übernehme natürlich keine Garantie, dass alles so klappt, wie es sollte. Für eventuelle Schäden hafte ich nicht.