[Gelöst] PHP letzte 2 Zeilen aus Datei ausgeben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich möchte die letzten zwei Zeilen aus einer Datei auslesen und anzeigen, leider ist das trotz vieler Beispiele im Netz nicht von Erfolg gekrönt.

    In der Datei stehen die Einträge so:

    Code
    15-09-2022 01:15:58 Strom an bei 27.14 Volt
    15-09-2022 01:38:28 Strom aus bei 25.71 Volt

    Mein PHP-Code sah zunächst so aus:

    Das sah zum einen nicht schön aus, da die Zeilenumbrüche verloren gingen, ausserdem wird die Seite vollgemüllt, je mehr Einträge dazukommen.

    Also habe ich den Code wie hier beschrieben erweitert, damit mir nur die letzten Zeilen angezeigt werden:

    Das wirft mir jedoch eine Fehlermeldung:

    Code
    PHP Fatal error:  Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, string given in /var/www/html/index.php

    :conf:  :helpnew:

    EDIT:

    Ich habe jetzt diesen Beispielcode probiert, das funktioniert, zeigt mir aber nur die letzte Zeile an, ich möchte aber die letzten beiden.

    Was muss ich hier ändern ?

    :denker:

  • Hallo,

    ich kann zwar null PHP (warum auch? *SCNR*), aber: lt. Doku liefert `file_get_contents` den _gesamten_ Inhalt der Datei als _einen_ String zurück -> dann macht `count` keine Sinn bzw. gibt es gar nicht, weil die Datenstruktur keine Zeilen kennt. Was du wahrscheinlich brauchst ist file, weil das eine Datei zeilenweise in einen Array einliest. So kommst du an die drei letzten Zeilen dran.

    Gruß, noisefloor

  • PHP
    // Alle Zeilen, keine Zeilenumbrüche und keine Leerzeilen
    $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    
    // Letzte 2 Zeilen
    $lines = array_slice($lines, -2);
    
    // Wieder zusammenbauen
    echo implode(PHP_EOL, $lines);

    Danke, das funktioniert, aber wie bekomme ich es hin, dass die Zeilenumbrüche nicht verloren gehen ?

  • fred0815 Das ist dann ja HTML das die ”ignoriert”. Also entweder die Zeilen in einen <pre>-Tag setzen, oder per CSS und ``white-space`` dafür sorgen, dass die in dem Element wo der Text steht, erhalten bleiben, oder statt ``PHP_EOL`` den Wert "<br>" zum zusammenfügen verwenden.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Ah, ok, so funktionierts:

    PHP
    <?php
    $filename = 'an_aus.txt';
    $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $lines = array_slice($lines, -3);
    echo implode("<br>", $lines);
    echo "<br />\n";
    ?>

    :danke_ATDE:

    P.S. Lässt sich hier sogar super ausprobieren:

    https://www.w3schools.com/php/phptryit.a…_string_implode

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!