PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmte Zeile löschen



sallo
16-11-2005, 14:19
Hallo, ich möchte mit PHP eine Log-Datei in HTML schreiben.

Hierzu füge ich den HTML-Header und danach Meldungen ein. Damit die Datei nicht zu groß wird, soll sie auf ca. 1000 Einträge begrenzt werden.

Sobald die 1000 erreicht ist, muss ein alter Eintrag (nach dem HTML-Header) gelöscht werden, damit ein neuer angefügt werden kann.

Wie groß der Header ist weiß ich, ich kann also mit fseek() zu der Stelle der Datei wo sich der älteste Eintrag befindet springen. Jetzt weiß ich nur nicht wie ich diesen löschen kann.

Sicher wäre es auch möglich, die geamte Datei per file() einzulesen, einen Eintrag zu löschen und die Datei dann wieder neu zu schreiben. Denke aber, das eine andere Lösung bei großen Dateien zu bevorzugen ist, oder?

Würde mich mal interessieren was ihr darüber denkt, bzw. wie ich mit Funktionen wie fseek() zu einem Ergebnis kommen kann.

thx,
-sallo

Turbohummel
16-11-2005, 18:16
Meines Wissens nach gibts da (unter PHP) keine andere Lösung.

moidaschl
20-11-2005, 10:31
du musst die datei einlesen und dann wegschneiden

BlueJay
20-11-2005, 11:36
Hierzu füge ich den HTML-Header und danach Meldungen ein. Damit die Datei nicht zu groß wird, soll sie auf ca. 1000 Einträge begrenzt werden.

Sicher wäre es auch möglich, die geamte Datei per file() einzulesen, einen Eintrag zu löschen und die Datei dann wieder neu zu schreiben.

Die letzte Methode ist bei max.1000 Einträgen kein Problem.
Als ich noch kein C kannte, wühlte sich ein php-Script durch die Logfiles, die ausgepackt so um die 80 Mb hatten. php hat's gebracht so mit eingestellten Rechenzeiten von 2 Stunden, aber es war jedesmal ein Kampf mit dem Sysop, wann ich durfte. Bei 300-500 Mb ist php allerdings indiskutabel.

so long,
BlueJay

Romanday
30-11-2005, 13:47
Hallo, ich möchte mit PHP eine Log-Datei in HTML schreiben.

Hierzu füge ich den HTML-Header und danach Meldungen ein. Damit die Datei nicht zu groß wird, soll sie auf ca. 1000 Einträge begrenzt werden.

Sobald die 1000 erreicht ist, muss ein alter Eintrag (nach dem HTML-Header) gelöscht werden, damit ein neuer angefügt werden kann.

Wie groß der Header ist weiß ich, ich kann also mit fseek() zu der Stelle der Datei wo sich der älteste Eintrag befindet springen. Jetzt weiß ich nur nicht wie ich diesen löschen kann.

Sicher wäre es auch möglich, die geamte Datei per file() einzulesen, einen Eintrag zu löschen und die Datei dann wieder neu zu schreiben. Denke aber, das eine andere Lösung bei großen Dateien zu bevorzugen ist, oder?

Würde mich mal interessieren was ihr darüber denkt, bzw. wie ich mit Funktionen wie fseek() zu einem Ergebnis kommen kann.

thx,
-sallo

Ich würde das anders machen.
Die LogDatei auf 10 einzelne Dateien aufteilen, dann jede einzeln Datei formatieren.

Vorteil: Die große LogDatei muß nur 1x vollständig gelesen werden,
und dient gleichzeitig als Backup!
Außerdem wird dein Programm schneller, da die Dateien zum formatieren
schneller gelesen werden können.