PHP, Dateien auswerten und Zeit?
Hallo zusammen,
zuerst mal, ich bin Einsteiger was PHP angeht, aber ich würde gerne folgendes richtig begreifen. Ich lese mit PHP eine Logdatei aus, die 240.000 Zeilen umfasst und eine Größe von 56MB hat. Hintergrund: Abfrage von 70 verschiedenen Browser mit IP-Prüfung. Zum Auswerten lese ich diese Datei 1 zu 1 in ein Array ein und starte danach eine Auswertung mit Code:
if (preg_match($suchmuster, $zeichenkette)) Prüfe ich aber mit "if" und "elseif" 70 Fallunterscheidungen ab, brauche ich mehr als 25 Sekunden dafür. Warum? Code:
if (preg_match($suchmuster0, $zeichenkette)) Gibt es eine Alternative zu "preg_match" und Array? Laut einiger Foreneinträge ist "preg_match" die schnellste Methode zum Auswerten. |
Welche Art von Untersuchungen machst du denn? Brauchst du dazu wirklich reguläre Ausdrücke?
|
Es gibt immer verschiedene Arten etwas zu suchen. Einige sind schnell, andere
halt nicht. Wie oft läuft das ? Lohnt eine Optimierung ? Und, woher stammen denn 70 verschiedene Browser ??? |
Zitat:
Wenn "Browser X", dann Treffer plus eins. Merke IP-Adresse und erst nachdem IP-Adresse wechselt, zähle erneut Treffer plus eins. (Nicht ganz astrein, da meine Besucher ab und an mehrere Browser verwenden, also hier die IP-Adresse nicht wechselt. Das ist aber ein anderes Problem :D ) Zitat:
Zitat:
Zitat:
Beispiel: Nehme ich eine simple Auswertung auf den String "Safari", so muss ich vorher 8 Strings (Android, Arora, Iron, Chrome, iPhone, OmniWeb, Origyn Web Browser und Shiira) ausklammern, die sich ebenfalls als Safari ausgeben. |
Geht es nur um die Anzahl der Zugriffe nac Browsern würde ich aus jeder Zeile
die Browserkennung (steht, glaube ich, in Klammern) isolieren und, wenn sie noch nicht in meiner Liste ist, neu anlegen. Ansonst inkrementieren. Ich wüßte vorher nicht alle Kennungen. Mal einen Lauf machen und sehen was herauskommt. (Dürfte in C in 1 sec durch sein, PHP weiß ich nicht). |
Teste das Script mal auf einem anderen Server, ob dieser ebenfalls so lange braucht.
|
Zitat:
Browser Shiira meldet sich mit "Shiira und Safari" als Kennung. Opera kann als "MSIE oder Opera" auftauchen, oder je nachdem welche sonstige ID über das Menu vom Besucher eingestellt wurde. Selbst Firefox ist als Kennung nicht ausreichend, da zum Beispiel der Camino Browser die Strings "Camino und Firefox" enthält. Komplex wird das ganze bei Mobile- oder Smartphones :roll: Zitat:
|
Laß doch erstmal die Suche nach bestimmten Broserkennungen weg. Der erste
Schritt wäre das Sammeln und Zählen aller Kennungen. Dann hast Du eine Liste aller vorkommenden Kennungen. Das zu analysieren ist erheblich einfacher und es geht Dir keiner verloren. |
Wie sieht denn das Suchmuster und die Zeichenkette aus?
Wie sieht das Script generell aus? Wenn Du möchtest, dann kann ich das Script mal bei mir laufen lassen, 'ne TestDatei müsste ich noch irgendwo auftreiben können. :) Wieviele Zeilen hat die Datei? Da ich das Script nicht kenne, stelle würde ich folgendes machen: - Datei zeilenweise einlesen und nicht auf einem Schlag - Alle Überprüfungen auf diese eine Zeile direkt nach dem einlesen anwenden - Im Standard-Log Format steht die Browserkennung in "" eingeschlossen am Ende der Zeile, also würde ich dem RegEx dies auch mitteilen (\".*<browserkennung>.*\"$/is), evtl. bringt dies etwas Zeitersparnis |
PHP-Code:
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:22 Uhr. |
Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
© Dirk H. 2003 - 2023