eddi: Letzte Zeile einer Datei löschen

Beitrag lesen

Hallo,

Wenn die Datei nicht zu groß ist:

davon sollte im Zweifel immer ausgegangen werden. Das Einlesen eines gesamten Files in den Arbeitsspeicher (wie es die vorgeschlagenen Funktion file_get_contents() und file() tun würden) ist absolut nicht notwendig:

$f='filename';  
$c=0;  
$l=0;  
$s=[link:http://de3.php.net/manual/de/function.filesize.php@title=filesize]($f);  
$dat=[link:http://de3.php.net/manual/de/function.fopen.php@title=fopen]($f,'r+');  
[link:http://de3.php.net/manual/de/control-structures.while.php@title=while]([link:http://de3.php.net/manual/de/function.ftell.php@title=ftell]($dat)!=$s){  
        $c+=$l;  
        $l=0;  
        [link:http://de3.php.net/manual/de/control-structures.do.while.php@title=do]{$l+=[link:http://de3.php.net/manual/de/function.strlen.php@title=strlen]($t=[link:http://de3.php.net/manual/de/function.fgets.php@title=fgets]($dat,128));}while([link:http://de3.php.net/manual/de/function.substr.php@title=substr]($t,-1)!="\n");  
}  
[link:http://de3.php.net/manual/de/function.fseek.php@title=fseek]($dat,$c,SEEK_SET);  
[link:http://de3.php.net/manual/de/function.ftruncate.php@title=ftruncate]($dat,$c);  
[link:http://de3.php.net/manual/de/function.fclose.php@title=fclose]($dat);

Gegebenenfalls müssen Zweitzugriffe während des Änderungsprozesses verhindert werden. flock() hilft dabei.

Auf der Funktionsseite bitte dringlichst die Warnung beachten!

Gruß aus Berlin!
eddi