de.comp.lang.php.* FAQ

13.5. Wie kann ich eine Datei zeilenweise rückwärts auslesen?

Keywords: Datei | Anfang | Ende | lesen | Zeile | Datenbank | rueckwaerts

Antwort von Johannes Frömter

Dateien sind nicht in "Zeilen" organisiert, die Zeilenende-Zeichen (\n und/oder \r) sind ganz gewöhnliche Bytes im Datenstrom. Für das Lesen vom Dateianfang bis zum nächsten Zeilenende-Zeichen gibt es entsprechende Funktionen ( fgets() ), in umgekehrter Richtung ist dies jedoch wegen der physikalischen Organisation des Dateisystems nicht sinnvoll möglich.

Man muss die Datei also zuerst vorwärts zeilenweise in ein Array einlesen - das erledigt die Funktion file() - und kann dann auf dieses Array beliebig, z. B. auch von hinten nach vorne, zugreifen.

Beim Schreiben müssen die "Zeilen" nicht umständlich vorne in die Datei eingefügt, sondern können einfach hinten an die Datei angehängt werden; hierzu wird die Datei im Append-(Anhängen)-Modus geöffnet:

<?php
  // In Datei schreiben (anhängen)
  $fp = fopen($filename, 'a+');
  flock($fp, 2) or die('Kann die Datei nicht locken');
  fwrite($fp, "$zeile\n");
  fclose($fp);
?>

<?php
  // Datei "zeilenweise" in ein Array einlesen
  $array = file($filename);

  // $array von vorne nach hinten durchlaufen
  foreach($array as $zeile) {
      echo trim($zeile) . "<br>\n";
  }

  // $array von hinten nach vorne durchlaufen
  $i = sizeof($array);
  while ($i--) {
      echo trim($array[$i]) . "<br>\n";
  }
?>

file() liest die Zeilen einschließlich der Zeilenende-Zeichen ein; da die letzte Zeile in der Datei nicht unbedingt ein Zeilenende-Zeichen hat, sollte trim() bzw. rtrim() angewendet werden, um einheitliche Zeilen zu bekommen.

Valid HTML 4.01! Valid CSS!

13.5. Wie kann ich eine Datei zeilenweise rückwärts auslesen?
http://www.php-faq.de/q/q-datei-rueckwaerts.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team