Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.211 Beiträge
 
Delphi 12 Athens
 
#8

Re: Webstatistiken auslesen

  Alt 10. Mai 2006, 12:11
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):
Code:
00
01
02
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):
Code:
13278
850
1
1
2
1
0
2
1
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;
?>
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat