Logdateien
Hannibal
- php
0 Thomas Luethi0 Hannibal
0 Andavos0 Hannibal
Hallo zusammen
Ich versuche schon seit einer Weile meine Log-Dateien auszulesen und einen einfachen Zugriffszähler zu machen. Dieser ist allerdings nicht so einfach.
Mein Prinzip ist folgendermassen: Ich lese alle IPs aus und "lösche" danach die gleichen raus und zählen die Restlichen zusammen.
Ich will also alle E-Mailadressen, die gleich sind nicht zählen.
Wie soll ich das anstellen?
Mit Arrays? oder wie?
Ich habe zwar schon versuche gemacht. Aber die habe ich aufgegeben.
Vielen Dank für eure Tipps
Gruss Hannibal
Hallo,
Ich lese alle IPs aus und "lösche" danach die gleichen raus und zählen die Restlichen zusammen.
Ich will also alle E-Mailadressen, die gleich sind nicht zählen.
Wo kommen denn ploetzlich die E-Mail-Adressen her? ;-)
Wie soll ich das anstellen?
Mit Arrays?
Ja. Das waere eine Moeglichkeit.
Z.B. mit den IP-Adressen als Schluessel.
Die Anzahl Elemente des Arrays entspricht
dann der Anzahl verschiedener Schluessel.
Dummycode:
unset($ipliste);
schleife
{
$ipadresse aus Logfile ermitteln;
$ipliste[$ipadresse]=1;
}
$anzahlips=count($ipliste);
Das ist vielleicht nicht die beste
Methode, aber sie duerfte funktionieren.
HTH, Gruesse,
Thomas
Hallo,
Hallo Tom
Erst mal danke für deine Antwort.
Wo kommen denn ploetzlich die E-Mail-Adressen her? ;-)
Us em heitere Himu.(Bin auch Berner)
Ja. Das waere eine Moeglichkeit.
Z.B. mit den IP-Adressen als Schluessel.
Ich merke, dass ich noch etwas ein Laie bin.
Du meinst ich sollte den Array nach der IPadresse benennnen.
Die Anzahl Elemente des Arrays entspricht
dann der Anzahl verschiedener Schluessel.Dummycode:
unset($ipliste);
Warum hier? Die Variable hat doch keinen Inhalt.
schleife
{
$ipadresse aus Logfile ermitteln;
$ipliste[$ipadresse]=1;
Verstehe ich das so richtig: Man teilt jedem Array, dessen Namen die IP-Adresse hat die Zahl eins zu?
}
$anzahlips=count($ipliste);
Wie ich das jetzt analysiert habe, werden allerdings die gleichen IPs nicht herausgelöscht?
Sehe ich das falsch?
Das ist vielleicht nicht die beste
Methode, aber sie duerfte funktionieren.
Genau so etwas habe ich gesucht.
Danke
HTH, Gruesse,
Thomas
Gruss aus Winterthur
Michy
Hallo Michael,
Wo kommen denn ploetzlich die E-Mail-Adressen her? ;-)
Us em heitere Himu. (Bin auch Berner)
Ah, genau. Wurzeln im Schwarzenburgerland, stimmt's?
(Du hattest mir mal ein Mail geschrieben.)
Du meinst ich sollte den Array nach der IPadresse benennnen.
Nein, die Schluessel, nicht die Variable selbst.
unset($ipliste);
Warum hier? Die Variable hat doch keinen Inhalt.
Einfach um sicher zu gehen, dass die Variable nicht existiert.
Weil ja nachher die "Groesse" (Anzahl Schluessel) des Arrays
entscheidend ist.
$ipliste[$ipadresse]=1;
Verstehe ich das so richtig: Man teilt jedem Array, dessen Namen die IP-Adresse hat die Zahl eins zu?
Genau.
Wenn eine IP-Adresse mehrmals vorkommt,
wird dem Array mit diesem Schluessel halt
mehrmals die 1 zugewiesen.
Das tut niemandem weh. ;-)
Zuweisungen:
$ipliste["127.0.0.1"]=1;
$ipliste["255.255.255.255"]=1;
$ipliste["127.0.0.1"]=1;
Resultat: Der Array hat zwei Elemente:
$ipliste["127.0.0.1"]=1;
$ipliste["255.255.255.255"]=1;
Wie ich das jetzt analysiert habe, werden allerdings die gleichen IPs nicht herausgelöscht?
Naja, sie werden nicht mehrfach gezaehlt.
Also entspricht die Anzahl Array-Elemente
der Anzahl verschiedener IP-Adressen.
Und das ist doch, was Du wolltest.
---
Wenn Du wissen willst, welche IP-Adresse wie viele
Anfragen gemacht hat, dann kannst Du natuerlich
das Skript entsprechend anpassen.
Statt einfach immer die Eins zuzuweisen
$ipliste[$ipadresse]=1;
musst Du schauen, ob es zu diesem Schluessel
schon einen Wert gibt.
Wenn ja: Um 1 erhoehen, wenn nein: 1 zuweisen.
if (isset($ipliste[$ipadresse]))
$ipliste[$ipadresse]++;
else
$ipliste[$ipadresse]=1;
---
Etwas Lektuere:
http://www.php.net/manual/de/language.types.array.php
http://www.php.net/manual/de/ref.array.php
http://www.php.net/manual/de/language.operators.increment.php
---
Fuer "Logfile-Analyse" gibt es uebrigens zahlreiche
gute Tools, die Dir wunderschoene Torten- und
Balkendiagramme herstellen. Zum Beispiel:
http://www.analog.cx/
http://awstats.sourceforge.net/
http://www.mrunix.net/webalizer/
Gruesse,
Thomas
P.S. Ich wuerde nie im Leben einen "Role-Account"
wie info@example.com in Foren oder Newsgroups
angeben. Ist aber Geschmackssache.
(Ob info@ ein offizieller Role-Account gemaess
einer RFC ist, weiss ich nicht.)
Deine Homepage gefaellt mir auf den ersten Blick gut.
Du solltest noch eine Charset-Angabe machen,
am besten serverseitig.
Aber die steht ja hier nicht zur Diskussion... ;-)
Hallo Michael,
Hoi Tom
Ah, genau. Wurzeln im Schwarzenburgerland, stimmt's?
(Du hattest mir mal ein Mail geschrieben.)
Genau.
Nein, die Schluessel, nicht die Variable selbst.
Aha. Ich meinte das richtige, aber habe es falsch gesagt.
$irgendwas[Schlüssel] oder?
Einfach um sicher zu gehen, dass die Variable nicht existiert.
Weil ja nachher die "Groesse" (Anzahl Schluessel) des Arrays
entscheidend ist.
ok.
Genau.
Wenn eine IP-Adresse mehrmals vorkommt,
wird dem Array mit diesem Schluessel halt
mehrmals die 1 zugewiesen.
Das tut niemandem weh. ;-)Zuweisungen:
$ipliste["127.0.0.1"]=1;
$ipliste["255.255.255.255"]=1;
$ipliste["127.0.0.1"]=1;Resultat: Der Array hat zwei Elemente:
$ipliste["127.0.0.1"]=1;
$ipliste["255.255.255.255"]=1;
ok.
Sehr kreative IPs. ;-)
Wie ich das jetzt analysiert habe, werden allerdings die gleichen IPs nicht herausgelöscht?
Naja, sie werden nicht mehrfach gezaehlt.
Also entspricht die Anzahl Array-Elemente
der Anzahl verschiedener IP-Adressen.
Und das ist doch, was Du wolltest.
Genau.
»»Gruesse,
»»Thomas
Gruss
Hannibal
Hallo,
also du erstellst ein leeres Array.
Dann liest du die Datei zeilenweise ein und gibst das dann aus
if(in_array($ipausderdatei, $array))
{
//nix
}
else
{
array_push($array,$ipausderdatei);
}
Am ende:
echo count($array);
MFG
Andavos
Hallo,
also du erstellst ein leeres Array.
Dann liest du die Datei zeilenweise ein und gibst das dann aus
if(in_array($ipausderdatei, $array))
{
//nix
}
else
{
array_push($array,$ipausderdatei);
}Am ende:
echo count($array);
Vielen vielen Dank.
Das ist sehr klug. Ich glaube jetzt sollte ich es hinkriegen.
MFG
Andavos
Gruss aus winterthur(CH)
Hannibal