Hello,
- $file = file("access_log");
- access_log leeren! (nicht löschen sondern leeren)
- foreach($file as $line) -> exploden und in db speichern
Da läuft über einen CronJob das Programm LogRotate. Musste mal nach suchen, wie sich das bezüglich der Groß-/Kleinschreibung wirklich schreibt.
Das ist aus dem von Dir genannten Grund auch gar nicht so unkritisch.
Der Apache hält nämlich ein Handle auf die Log-Datei.
Das darf man ihm auch nicht wegnehmen, oder kaputtmachen, sonst logged er nicht mehr weiter.
Es gibt aber auch keinen Fehler, wenn man ihm die Datei wegnimmt. Die weiteren Logbucheinträge landen dann einach im dev NUL
Wie logrotate das nun so genau macht, habe ich leider auch noch nicht rausgefunden, bzw. war zu faul dazu, habe es damals einfach aus dem Cron-Job rausgenommen...
Ich nehme an, dass Logrotate die Datei im Append-Modus hält.
Dann kann man sie gleichzeitig auslesen.
Zu untersichenm, wie aber genau der Sperrmechanismus funktioniert, habe ich noch auf dem Zettel.
Ich stelle mir das so vor:
zweiter Prozess setzt sich auf die Datei
Sperrt die Datei mit soft-read-lock
liest sie aus
kürzt sie auf 0
gibt sie wieder frei
dann müsste logrotate auch mit soft-lock (advisory lock) arbeiten
die Datei exclusiv sperren
append ausführen
die Datei wieder freigeben
Und der Append-Mechanismus müsste Rücksicht auf die aktuelle Länge der Datei nehmen.
Wenn da man nicht noch was anderes dahintersteckt?
Z.B. dass Appends aus verschiedenen Prozessen automatisch serialisiert werden?
Wäre zumindest denkbar. Das hat ja schließlich schon funktioniert, als man sich über Locking noch keine weiteren Gedanken gemacht hat.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
![](http://bitworks.de/~selfHTML/Virencheck.gif)