Eintrag aus txt- Datei löschen

dobermant

Erfahrenes Mitglied
Guten Abend,

Ich möchte aus einer txt- Datei einen oder mehrere Einträge löschen.
Bei dem txt- file handelt es sich um eine Logdatei. Aufgabe ist es nun,
Zeilen mit einer bestimmten IP zu löschen.

Der Inhalt der Datei sieht ungefähr so aus:
81.14.159.50 - 9329 - 1094460417 - 800 - 16 -
81.14.159.50 - 9329 - 1094460417 - 800 - 16 -
81.14.159.50 - 9329 - 1094460418 - 800 - 16 -
141.78.101.102 - 31375 - 1094463819 - 800 - 32 - u
212.95.104.244 - 9329 - 1094631216 - 1024 - 32 - u
212.95.104.244 - 9329 - 1094631537 - 1024 - 32 -

Zum Auslesen der Datei, benutze ich folgende Schleife:

PHP:
$handle = fopen ("../../logfiles/k$tmpid", "r");
while (!feof($handle)) {
   $buffer = fgets($handle, 4096);
   $buffer=explode(" - ",$buffer);
   $ip=$buffer[0];
.......
}
Mir ist nicht klar, wie ich jetzt eine oder mehrere Zeilen löschen kann.
Muss das auch mit einer Schleife geschehen, oder kann man mehrere Einträge
aus dem erstellten Array löschen und muss dann die Datei neu schreiben?
Hat vielleicht jemand ein beispiel parat?

besten Dank im vorraus
peterele
 
Also ich würde das explode mal nicht auf die " - " machen sondern auf den zeilenumbruch "\n"

dann steht in jedem array feld eine zeile.

Aschließend die elemente des array zählen

$tmp = count($buffer);
und mit ner forschleife die elemente die die gesuchte ip enthalten löschen:

for($i;$i<=$tmp;$i++)
{
if (ereg("[".$ip."]",$buffer[$i]) $buffer=array_splice($buffer,$i,1)
}
so löscht du alle felder raus, die den wert der in $ip enthalten is enthalten.

sollte so .

anschließend halt den buffer wieder in die dateischreiben :)
 
Am einfachsten liest du mit file() die Datei in ein Array ein.
Das Array kannst du dann in einer Schleife durchlaufen und wenn dein Kriterium eingetreten ist, dann kannst du mit unset() die Zeile aus dem Array löschen. Anschliessend schreibst du das Array wieder in die Datei.

Alternativ kannst du auch gleich beim durchlaufen der Schleife die Zeilen wieder raus schreiben, und die, die du löschen willst überspringen.
 
wenn ich die datei per file() einlese, sind dann die einzelnen
Arraywerte die einzelnen Zeilen? Würde das ganze auch mit
grösseren txt-Files laufen(bis 1 MB)
wäre ein kleines Beispiel möglich?

danke im vorraus
peterle
 
Zurück