Entwickler-Ecke

Programmiersprachen (Server) - Logdateien auswerten


Martok - Sa 01.09.07 19:17
Titel: Logdateien auswerten
Hi Leute!

Ich möchte per PHP eine Datei (wens interessiert: SA:MP Ban-Definitions-Datei) parsen und in eine Datenbank einlesen.
Die Datei besteht aus Zeilen in diesem Format:

Quelltext
1:
IP [01/09/07 | 01:17:39] PLAYERNAME - INFOTEXT                    


Diese möchte ich ein eine DB mit den Feldern IP, UPDATE, NAME zerlegen. Den Infotext brauch ich nicht.
Die Datei wird per HTTP-Upload an ein PHP-Script übertragen.

Meine Frage jetzt: was brauche ich dafür für Funktionen? Mit Dateiverarbeitung unter PHP hab ich nie was gemacht, also hab ich da so gar keine Ahnung... Irgendwie muss ich die Datei zeilenweise kriegen... danach die paar RegEx drüberschicken ist nicht so das Problem.

Danke schonmal,
Martok


TProgger - Sa 01.09.07 19:57

Hi,
das lässt sich relativ einfach realisieren. Mit der Function file() geht das.
Zitat:
Zitat:

Die Funktion file() ist identisch mit readfile(), außer dass die eingelesene Datei als Array zurückgegeben wird. Jedes Feld des Arrays korrespondiert mit einer Zeile der Datei. Der Zeilenumbruch bleibt erhalten. Im Fehlerfall gibt file() FALSE zurück.

Allerdings muss man sich schon etwas mit php uns MySQL befassen, denn man müsste übe CREATTABLE erst mal eine entsprechende Table anlegen.
Weiterführende Links http://www.php-homepage.de/manual/ und
http://de3.php.net/manual/de/

Gruß


Martok - Sa 01.09.07 20:19

So einfach ist das? Cool ;)

Und den Rest kann ich ja... auch wenn ich deinen ersten Link noch nicht kannte^^

EDIT: so, alles fertig. War ja richtig einfach ;)


BenBE - So 02.09.07 17:23


Quelltext
1:
2:
3:
4:
5:
6:
preg_match_all('/^(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s+\\[(.+?)\\]\\s+(\\w+)\\s+\\-\\s+(.+)$/im', $subject, $result, PREG_SET_ORDER);
for ($matchi = 0; $matchi < count($result); $matchi++) {
  for ($backrefi = 0; $backrefi < count($result[$matchi]); $backrefi++) {
    // $result[$matchi][$backrefi];
  } 
}


Dann nur noch in die DB eintragen ;-)