Maike: Erste Zeile txt-file löschen

Hallo Forum,

ich hab mir mal wieder was in den Kopf gesetzt und kriege es nicht hin. Ich bin ja leider immer noch ein ziemlicher PHP-Anfänger und hoffe Ihr könnt mir etwas helfen ;-)

Ich habe ein .txt-file indem ich genau 10 strings (in diesem Fall die Timestamp - kann aber auch etwas anderes sein) auf 10 Zeilen verteilt speichern möchte. Jetzt würde ich gerne aber immer nur genau 10 Zeilen haben. Also wenn ich ne neue Timestamp speichere, soll die älteste rausfliegen.

Am liebsten wäre es mir, wenn ich die aktuellste Timestamp oben eingefügt würde, und dann die letzte Zeile der Liste einfach gelöscht werden würde.

Ich hoffe Ihr versteht was ich meine.

Das ist das Script das ich mir zusammengeschustert habe. Funktioniert nur leider nicht so ganz. Naja die Timestamp wird immerhin schonmal geseichert.

<?php
$file = "letzte.txt";
$datei = fopen($file, "a");
flock($datei, 2);
// Timestamp speichern
fwrite($datei, time()."\n");
// Zeihlenanzahl letzte.txt ermitteln
$zeilenanzahl = count(file($file));
if ($zeilenanzahl >= 10) {
// letzte.txt zeilenweise in array einlesen
$lines = file ($file);
//Erste Zeile löschen
unset($lines[0]);
}
flock($datei, 3);
fclose($datei);
?>

gruß Maike

  1. Hallo Maike,

    $foo = file($file);
    $zeilenanzahl = count($foo);
    if ($zeilenanzahl >= 10)
    {
      // Ich bin nicht sicher ob ich das richtig verstanden mit der Anordnung der Timestamps, ich sage mal, der erste Wert soll der neue Timestamp sein
      $foo[0] = neuer timestamp;// wobei neuer Timestamp zb mit mktime() und date() erzeugt wird
    }
    $bar = implode ('\n', $foo);//wobei du vielleicht trim() benutzen willst
    Jetzt hast du einen String mit den neuen Daten, den du mit fwrite wieder in dieselbe Datei schreibst

    $datei = fopen($file, "a");

    hier wuerde ich 'wb' statt a nehmen, dann kannst Du gleich wieder reinschreiben
    fwrite($datei, $bar);
    fclose($datei);

    Schau Dir die einzelnen Funktionen noch mal im Manual an, insbesondere die User-Kommentare sind oft lohnend (engl. und Online-Version).

    Dieter

    1. Hi Dieter,

      danke für deine Hilfe!

      <?php
      $file = "letzte.txt";
      $foo = file($file);
      $zeilenanzahl = count($foo);
      if ($zeilenanzahl >= 5)
      {
        $foo[0] = mktime();
      }
      $bar = implode ($foo);
      echo $bar;
      $datei = fopen($file, "wb");
      flock($datei, 2);
      fwrite($datei, $bar);
      flock($datei, 3);
      fclose($datei);
      ?>

      Jetzt habe ich die Situation, dass bei jedem neuen Aufruf des Programms die Timestamp der ersten Zeile ausgetauscht wird.

      Eigentlich wollte ich, dass die neue Timestamp dort eingefügt wird und die vorhandenen um eine Zeile nach unten verschoben werden und die letzte wieder gelöscht wird, dass es wieder nur 5 Stück sind.

      mfg Maike

      1. Hallo,

        mach doch ein sort() drueber, oder ein natsort().

        Dieter

        1. Hallo Dieter,

          danke für den Tip mit sort()!

          Ich habs jetzt ganz einfach gelöst. Und ich bin hochzufrienden!

          $file = "letzte.txt";
          $foo = file($file);
          $foo[19] = time()."\n";
          arsort ($foo);
          $bar = implode ($foo);
          $datei = fopen($file, "wb");
          flock($datei, 2);
          fwrite($datei, $bar);
          flock($datei, 3);
          fclose($datei);