Wenn ihm nur ein Überblick reicht ... dat is eigentlich recht einfach.
winziger Counter (per [IMG] gehts leider nicht -.-'')
links (groß) = Gesamtbesucher (seit Counterstart)
rechts oben = laufende Woche (letze 7 Tage)
mitte unten = heute (seit 0 Uhr)
rechts unten = aktuell (in den letzten Minuten)
Die IPs werden natülich gekoggt (für 'ne Weile), damit kein Besucher mehrmals gezähl wird, wenn er sich z.B. mehrere Seiten ansieht)
Eingebunden wirds z.B. als Bild über http
://
URL/Zaehler.php?ID={ID},
wobei noch die Parameter
&F={Farbe} (Textfarbe) und
&Z=0 (nur Anzeigen, nicht mitzählen) angegeben werden könnten.
Und was die Datenmenge angeht ... da bei mir mehrere Counter verwaltet werden, gibt's 'ne Liste der CounterIDs (Zaehler.txt):
Und für jeden Counter die Zählerstande + IPs:
IP-Liste: (ZaehlerIPs_*.txt)
Code:
1147261400»xxx.xxx.xxx.xx1
1147261409»xxx.xxx.xxx.xx9
Zählerstände (Zaehler_*.txt):
Also soviele Daten sind dat garnicht ... die IPs werdne ja nach 'ner bestimmten Zeit eh bereinigt und was den Rest (Zaehler_*.txt) angeht eine Zeile für's Datum (damit es am nächsten Tag umschaltet ... man könnte ja auch Stunden+24*Datum nehmen, dann hätte man 'ne stündliche Auswertung), dann der gesamtzählerstand und jeweils noch 'ne Zeile pro Intervall (halb bei mir 7 Zeilen für 7 Tage).
Hatte es mit gespart für die paar Daten noch 'ne Datenbank einzusetzen ... lohnt sich garnicht, aber wer's mag, der kann ja och alles in 'ner
DB speichern, wobei das textbasierende vermutlich schneller ist und zusätzlich auch dann läuft, wenn die
DB mal nicht verfügbar ist.
In dem Bild wird zwar nur gesamt ausgewerte, aber man könnte ja och die Werte einzeln auslesen und z.B. in 'ner Tabelle anzeigen.
Also klein is die "einzige" PHP-Datei eigentlich och und falls dat hilft ... hier isse (is zwar auch schon in die Jahre kekommen, aber sie läuft und läuft und läuft)
Code:
<?php
// © 1997-2005 by FNS Enterprize's™
// 2003-2005 by himitsu @ Delphi-PRAXiS
ignore_user_abort(true);
// ID-Kontrolle
$Dateizeiger = fopen("Zaehler.txt", "r");
$ZaehlerID_freigegeben = false;
while (!feof($Dateizeiger) && !$ZaehlerID_freigegeben)
if (trim(fgets($Dateizeiger)) == $HTTP_GET_VARS["ID"]) $ZaehlerID_freigegeben = true;
fclose($Dateizeiger);
if (!$ZaehlerID_freigegeben) {
echo "unbekannte ID (\"" . $HTTP_GET_VARS["ID"] . "\")";
exit;
}
// Variablen
$D_Zaehler = "Zaehler_" . $HTTP_GET_VARS["ID"] . ".txt";
$D_Zaehler_BesucherIPs = "ZaehlerIPs_" . $HTTP_GET_VARS["ID"] . ".txt";
$Dauer = 7;
// Dateien prüfen (kann entfallen, wenn sie schon existieren)
if (!file_exists($D_Zaehler)) {
for ($i = 0; $i < 2 + $Dauer; $i++) $Zaehler[$i] = 0;
touch($D_Zaehler); chmod($D_Zaehler, 0777);
$fh = fopen($D_Zaehler, "w");
fwrite($fh, join("\r\n", $Zaehler));
fclose($fh);
}
if (!file_exists($D_Zaehler_BesucherIPs)) {
touch($D_Zaehler_BesucherIPs); chmod($D_Zaehler_BesucherIPs, 0777);
$fh = fopen($D_Zaehler_BesucherIPs, "w"); fclose($fh);
}
// Daten lesen
$Dateizeiger = fopen($D_Zaehler, "r");
$Zaehler = array();
$i = 0;
while (!feof($Dateizeiger) && ($i < 2 + $Dauer))
if (($Temp = trim(fgets($Dateizeiger))) > "")
$Zaehler[$i++] = intval($Temp);
fclose($Dateizeiger);
$Dateizeiger = fopen($D_Zaehler_BesucherIPs, "r");
$Zaehler_BesucherIPs = array();
$i = 0;
while (!feof($Dateizeiger))
if (($Temp = trim(fgets($Dateizeiger))) > "")
$Zaehler_BesucherIPs[$i++] = $Temp;
fclose($Dateizeiger);
$BesucherIP = $_SERVER["REMOTE_ADDR"];
$Datum = floor(time() / 86400);
// Statistik prüfen
if ($Zaehler[0] != $Datum) {
$Tage = $Datum - $Zaehler[0];
$Zaehler[0] = $Datum;
for ($i = $Dauer - 1; $i > 0; $i--)
if ($Tage <= $i) $Zaehler[2 + $i] = $Zaehler[2 + $i - $Tage]; else $Zaehler[2 + $i] = 0;
for ($i = 0; $i < $Tage; $i++) $Zaehler[2 + $i] = 0;
if ($HTTP_GET_VARS["Z"] == "0") {
// Zählerstände speichern
$fh = fopen($D_Zaehler, "w");
fwrite($fh, join("\r\n", $Zaehler));
fclose($fh);
}
}
// alte IPs löschen
$Zaehler_BesucherIPs_ = array();
$BesucherIP_unbekannt = true;
$j = 0;
for ($i = 0; $i < count($Zaehler_BesucherIPs); $i++) {
$temp = explode("»", $Zaehler_BesucherIPs[$i]);
if ($temp[0] > time()) {
if ($temp[1] == $BesucherIP) {
$Zaehler_BesucherIPs_[$j] = (time() + 3600) . "»" . $BesucherIP;
$BesucherIP_unbekannt = false;
} else $Zaehler_BesucherIPs_[$j] = $Zaehler_BesucherIPs[$i];
$j++;
}
}
if ($BesucherIP_unbekannt && ($HTTP_GET_VARS["Z"] != "0")) {
// BesucherIP merken
$Zaehler_BesucherIPs_[count($Zaehler_BesucherIPs_)] = (time() + 3600) . "»" . $BesucherIP;
// Zähler erhöhen
$Zaehler[1]++;
$Zaehler[2]++;
// Zählerstände speichern
$fh = fopen($D_Zaehler, "w");
fwrite($fh, join("\r\n", $Zaehler));
fclose($fh);
}
// die BesucherIPs speichern
$fh = fopen($D_Zaehler_BesucherIPs, "w");
fwrite($fh, join("\r\n", $Zaehler_BesucherIPs_));
fclose($fh);
ignore_user_abort(false);
// Ausgabe
$j = 0;
for ($i = 0; $i < $Dauer; $i++) $j += $Zaehler[2 + $i];
$Bild = imagecreate(75, 18);
$Hintergrundfarbe = imagecolorallocate($Bild, 254, 254, 254);
if (strlen($HTTP_GET_VARS["F"]) == 6) {
$Textfarbe = imagecolorallocate($Bild, hexdec(substr($HTTP_GET_VARS["F"], 0, 2)), hexdec(substr($HTTP_GET_VARS["F"], 2, 2)), hexdec(substr($HTTP_GET_VARS["F"], 4, 2)));
} else {
$Textfarbe = imagecolorallocate($Bild, 0, 0, 0);
}
imagefill($Bild, 1, 1, $Hintergrundfarbe);
imagestring ($Bild, 5, 0, 1, $Zaehler[1], $Textfarbe);
imagestring ($Bild, 1, 75 - (imagefontwidth(1) * strlen($j)), 0, $j, $Textfarbe);
imagestring ($Bild, 1, 75 - (imagefontwidth(1) * strlen($Zaehler[2] . " " . count($Zaehler_BesucherIPs_))), 18 - imagefontheight(1), $Zaehler[2] . " " . count($Zaehler_BesucherIPs_), $Textfarbe);
imagecolortransparent($Bild, $Hintergrundfarbe);
header("Content-Type: image/png");
imagepng($Bild);
imagedestroy($Bild);
exit;
?>