![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: FeGm, 30. 04. 2006, 19:31
Hallo!
ich möchte ein PHP Skript bauen, das wenn ic hes aufrufe die letzte Zeile einer Datei löscht.
Wie geht sowas?
mfg, FeGm
Die folgende Nachricht zum Thema stammt von: Julian von Mendel, 30. 04. 2006, 19:37
Hi,
»» ich möchte ein PHP Skript bauen, das wenn ic hes aufrufe die letzte Zeile einer Datei löscht.
Datei öffnen (fopen), Datei einlesen (while, feof, fgets) und dabei jede Zeile als Element in ein Array einfügen, Datei locken (flock), letzten Eintrag aus dem Array entfernen (array_slice), Array wieder zusammensetzen (implode), Daten zurückschreiben (fwrite), Datei schließen (fclose).
Schöne Grüße
Julian
--
http://lighttraffic.de | http://derjulian.net
Die folgende Nachricht zum Thema stammt von: dedlfix, 30. 04. 2006, 21:28
echo $begrüßung;
»» ich möchte ein PHP Skript bauen, das wenn ic hes aufrufe die letzte Zeile einer Datei löscht.
Wenn die Datei nicht zu groß ist:
Einlesen in einen String mittels file_get_contents(), ermittle die Position des letzten Zeilenumbruchs mit strrpos(), und schneide dann mit ftruncate() (plus fopen() und fclose()) ab.
Oder: Einlesen mittels file(), letztes Array-Element löschen, implode()ieren und schreiben.
Wenn die Datei sehr groß ist und du sie nicht in Gänze dem Arbeitsspeicher zumuten möchtest:
Lese-Datei(1) öffnen mit fopen(), zweite Datei(2) zum Schreiben öffnen, solange das Ende von 1 noch nicht erreicht ist: wenn eine gemerkte Zeile vorhanden ist, diese nach 2 schreiben, Zeile aus 1 mittels fgets() lesen und merken. 1 und 2 schließen, 1 löschen und 2 umbenennen.
Gegebenenfalls müssen Zweitzugriffe während des Änderungsprozesses verhindert werden. flock() hilft dabei.
echo "$verabschiedung $name";
Die folgende Nachricht zum Thema stammt von: eddi, 01. 05. 2006, 00:31
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=filesize($f);
$dat=fopen($f,'r+');
while(ftell($dat)!=$s){
$c+=$l;
$l=0;
do{$l+=strlen($t=fgets($dat,128));}while(substr($t,-1)!="\n");
}
fseek($dat,$c,SEEK_SET);
ftruncate($dat,$c);
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
--
PHP: PHP unter Linux installieren, in Bearbeitung PHP Konfigurieren
© 1998-2006
Impressum, Software: Classic Forum