Nico: letzte Zeile in .txt löschen

Beitrag lesen

Hallo!

Als ich im Archiv gesucht habe, wie ich eine Zeile aus einer .txt löschen kann, bin ich auf das hier gestoßen: http://www.php-faq.de/q/q-datei-einfuegen.html. Ich habe dann versucht das Skript so umzuschreiben, dass wenn in einer Textdatei mehr als x Zeilen sind, die letzte gelöscht wird. Das ist dabei rausgekommen:

$avar = file("chat.txt");
$zeilenanzahl = count($avar)+1;
if ($zeilenanzahl>9){
// Shared lock auf die Quelldatei
$oldfile="chat.txt";
$old = fopen("chat.txt", "r");
flock($old, 1) or die("Kann die Quelldatei $oldfile nicht locken.");

// Exclusive lock auf die Zieldatei
$new = fopen($oldfile.".new", "w");
flock($new, 2) or die("Kann die Zieldatei $newfile nicht locken.");

$lineno = 0;

while($line = fgets($old, 1024)) {
  if ($lineno++ == 10)
    continue;  // Zeile auslassen

fputs($new, "");
}

fclose($old); // Gibt das Lock automatisch auf

// Alte Datei wegwerfen.
unlink($oldfile);

// Neue Datei umbenennen.
// (In Windows müssen das rename() und das fclose($new)
//  vertauscht werden, da es nicht möglich ist, in Windows
//  eine offene Datei umzubenennen.

// Neue Datei schließen und dabei Lock aufgeben.
fclose($new);
rename($oldfile.".new", $oldfile);
}

Da kam dann als erstes immer der Fehler, dass die Quelldatei nicht gelockt werden kann. Das ist ja erstmal nicht weiter tragisch. Ich habs also einfach erstmal auskommentiert.
Aber jetzt kommt der Fehler: ich habe mit einem Formular immer neue Zeilen in die .txt geschrieben. Als dann neun Zeilen in der Datei waren, löschte das Skript alle neun und schrieb dann nur den neuen rein. An welcher Stelle habe ich das Skript denn falsch umgeschrieben?
Ich hoffe, mir kann und wird jemand helfen.

Nico