dedlfix: Wie kann ich am sinnvollsten den Text durchsuchen?

Beitrag lesen

Tach!

  • Welche IP-Adresse taucht mindestens 5 Mal auf?
  • Welche IP-Adresse hat mehr als 2 Einträge innerhalb von 3 Sekunden?

Habt ihr eine Idee, wie ich das am geschicktesten umsetzen kann?

Trenne beide Aufgabe und erledige sie separat. Die erste kann man vielleicht im Vorbeigehen während der zweiten erledigen. Aber dann fällt dir irgendwann noch eine dritte und eine vierte ein, und dann wird es irgendwann unübersichtlich und unnötig komplex. Um die Liste nur einmal durchgehen zu müssen kannst du ja eine Liste der Aufgabe erstellen und für jeden Log-Eintrag diese Aufgabenliste abarbeiten. Die Aufgaben wäre eigene Funktionen. Werte, die zwischen den Aufrufen gespeichert werden müssen, kann man global anlegen (unschön), oder als statische Variable innerhalb der Funktion. Da gibts dann nur ein Problem, das Endergebnis aus der Funktion rauszubekommen. Besser wäre ein Objekt mit innerer Datenhaltung und zwei Methoden. Die eine sammelt die Daten, über die andere kann man für das Ergebnis abfragen. Diese Methoden kann man dann wie unter Callables - Typ 3 beschrieben aufrufen. Vielleicht ist das Konstrukt am Ende weniger performant als eine Alles-in-einem-Lösung (messen!). Aber das musst du dann einschätzen, ob dir Geschwindigkeit oder Wartbarkeit wichtiger ist.

Der erste Teil ist einfach eine Liste mit IP-Adressen, in die einzelnen Einträge je IP-Adresse hochgezählt oder mit Zählerstand 1 hinzugefügt werden.

Für die zweite würde ich ein Array mit Timestamps (die Uhrzeit als Strings geht ebenso) als Keys anlegen und mit einem Array als Wert, in dem die IP-Adressen zu diesem Zeitpunkt abgelegt sind. Für jede neue Zeile aus dem Logfile wirfst du die Einträge am Anfang des Arrays raus, die älter als die drei Sekunden sind. Mit key() gibts die Zeit, mit array_unshift() wird ein Datensatz am Anfang entfernt. Das ganze solange, bis key() einen Wert innerhalb der Zeitspanne liefert. Durch das Rest-Array durchlaufen und zählen, ob die aktuelle IP aus dem Logfile mehrfach enthalten ist.

dedlfix.