Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Webstatistiken auslesen (https://www.delphipraxis.net/69094-webstatistiken-auslesen.html)

fkerber 10. Mai 2006 08:49


Webstatistiken auslesen
 
Hi!

Ich habe ein kleines Problem. Ich betreue den Webauftritt einer kleineren Firma. Deren Chef würde jetzt gerne öfter mal einen Blick auf die Statistiken werfen, insbesondere mal so zwischendurch nen kurzen Blick auf die Besucherzahlen.

Zwar steht uns awstat zur Verfügung, allerdings fühlt er sich durch die Fülle an Informationen regelrecht erschlagen, was ich auch durchaus nachvollziehen kann.

Natürlich kann ich jetzt einfach selbst einen seperaten Counter zusammenprogrammieren, wenn das allerdings tagesaktuelle Auswertung werden soll, dann wird das schon etwas aufwändig (auch wenn es machbar wäre)


Deswegen jetzt die eigentliche Frage:
Kann ich irgendwie die awStats auslesen oder direkt auf die Apache Logs (ich denke mal, da kommen die Daten her?) zugreifen?
Wichtig ist dabei, das ganze soll in PHP funktionieren, also leider nix mit Indy die Ausgabe-Seite parsen ;)
Falls es nicht anders geht, würde ich mich mal noch nach CGI umschauen, aber auf jeden Fall webbasiert.

Was gibt es denn da so für Möglichkeiten?


Ciao Frederic

sh17 10. Mai 2006 09:16

Re: Webstatistiken auslesen
 
also bei 1und1 mit apache sind die logs in

/logs/access.log.xy.gz

zu finden

wobei xy die Woche des aktuellen Jahres ist.

Die brauchst Du "bloss" auspacken und kannst Sie auswerten.

Matze 10. Mai 2006 09:27

Re: Webstatistiken auslesen
 
Moin, bei mir (MW-Internet) sind diese archiviert in

log\old\access_log_2005_w45-0.gz

Man sieht, auch mit Angabe der Kalenderwoche. Die aktuelle Datei ist bei mir direkt im log-Ordner. Bei einem anderen Hoster von mir ist es genauso. Also, wie sh17 sagte, einfach entpacken und auslesen. Doch Achtung, die Dateien sind dann relativ groß (bei mir ~8 MB).


Btw: Cool, dass du eine Firmenseite wartest, das kommt evtl. auch ml auf mich zu, dann werde ich mir evtl. mal bei dir Rat holen. ^^

fkerber 10. Mai 2006 10:47

Re: Webstatistiken auslesen
 
Hi!

Ok, danke soweit mal für die Info.
Ich habe den Ordner auf dem Webspace gefunden und frage dann mal bei meinem Hoster an, ob er mir da nicht mal Zugriff gewähren will :wink:


Ciao Frederic

Matze 10. Mai 2006 10:49

Re: Webstatistiken auslesen
 
Hi,

normalerweise müsstest du doch Zugriff darauf haben. :gruebel:

himitsu 10. Mai 2006 11:11

Re: Webstatistiken auslesen
 
Nicht immer, es gibt einige Anbieter, die z.B. solche Dinge gesperrt haben (hatte ich och ma) -.-''


@fkerber: eventuell kann es aber dennoch einfacher sein was eigenes zu basteln (aber da git's ja auch schon Fertiges), denn das Parsen der nötigen Informationen ('s steht ja nicht gerade wenig drin) ist auch nicht mit unbedingt wenig Aufwand möglich.

Matze 10. Mai 2006 11:20

Re: Webstatistiken auslesen
 
Es passt irgendwie zum Thema:
Mich würde auch interessieren, wie man so etwas selbst macht. Logt man einfach jeden Seitenaufruf in der Datenbank mit IP, Link, Uhrzeit & Co und liest das da nur aus (Anzeige in Balkendiagrammen z.B.) oder geht man da ganz anders vor?

Denn bei einer gut besuchten Webseite wären das ja riesige Datenbanktabellen.
Ich denke auch, dass es einfacher ist, als das ganze On-The-Fly zu parsen und auszugeben, denn das Entpacken benötigt auch gewisse Zeit und das Parsen sowieo. Da ist etwas eigenes sicher schneller und resourcenschonender.

himitsu 10. Mai 2006 12:11

Re: Webstatistiken auslesen
 
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;
?>

fkerber 10. Mai 2006 12:50

Re: Webstatistiken auslesen
 
Hi!

Danke für den Code, werder ich mich mal einlesen.
Habe eben auch noch weiter mit Matze darüber gesprochen, der mir freundlicherweise auch mal so einen Log-File zur Verfügung gestellt hat. Nachdem ich den dann mal gesehen habe, wurde recht schnell klar, dass es nichts bringt, das Parsen zu wollen.

Es wird also auf einen seperaten Counter (mit DB) rauslaufen, da werd ich mich heut mittag dann mal rannmachen...

Danke für eure Unterstützung.


Ciao Frederic

himitsu 10. Mai 2006 13:32

Re: Webstatistiken auslesen
 
Na dann viel Spaß dabei :thumb:

PS: Ach ja, eingebunden hab'sch meinen Counter natürlich so, damit der Besucher auch weiß was welche Zahl bedeutet der passende Hint und dann halt noch'n Link zur großen Ansicht :stupid:
Code:
[img]http://.../Zaehler.php?ID=01&amp;F=000000[/img]


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz