Thomas Schmieder: letzte Zeile zuerst

Beitrag lesen

Hallo,

ich (Anfänger) habe folgendes sehr einfaches script geschrieben, um eine userlog-datei auszulesen:
(Beispiel Zeite aus Datei: Thomas|217.4.53.2|http://www.XXXX.de/XXX/member.shtml|Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)|Mon Jun 17 22:02:54 2002|)

<?PHP
$statistik = "userlog.txt";
$fp = fopen($statistik,"r");
while($zeile = fgetcsv($fp,2000,"|")){
    $x=0;
    echo " $zeile[$x] ";
    $x=4;
    echo " $zeile[$x] ";

}
fclose($fp);
?>

Das klappt auch ganz gut, nur möchte ich jetzt, dass die unterste (aktuellste) Zeile der userlog.txt zu erst ausgegeben wird.

Hallo Tobi,

mein erster Gedanke war: das geht nicht. Aber man soll ja nicht immer gleich aufgeben.

Ich habe da eine Idee, eine recht einfache sogar. Allerdings weiß ich nicht, ob das Speichermanagement von php da noch mitspielt. Lassen wir es doch mal darauf ankommen.

In Kladde:

Einlesen der gesamten Datei in eine Variable  OK
Anwendung der Stringfunktion strrev() auf die Variable ??
Einlesen der Zeilen (die sind jetzt rückwärts) immer bis zum  nächsten Zeilenende-Zeichen.
Umdrehen und anzeigen.
Der Vorteil bei Linux-Systemen ist, dass sie nur ein Character für das Zeilenende einsetzen. Bei DOS-Datein hättest Du mit CR-LF zwei Zeichen zu suchen und das in der richtigen Reihenfolge.

Dumme Idee. -> Andere

Feststellung der Dateilänge
Rechnerische Einteilung in Blöcke
Datei öffnen im BINÄRMODE
Dateizeiger positionieren auf letzten Block
Einlesen des Blockes in Variable
Explode in ein Stringarray mit 0Ah als Trennzeichen.

Die erste Zeile muss man wahrscheinlich wegschmeißen.
Aber Du willst das Array ja sowieso von hinten lesen.

Wenn Du willst, versuchen wirs mal...

Zeilenende-Zeichen
Linux/Unix  0A
DOS         0D 0A
MAC         0D