2011-01-06 12 views
0

Ich versuche, eine News-Feed-Art Sache in PHP zu machen.PHP-Text-Datei Nachrichten Updates

Ich habe eine Textdatei - news.txt und eine PHP-Datei index.php.

Ich habe den umgebenden Code gemacht und die Textdatei geöffnet/geschlossen. Jetzt bin ich fest, wie man die neue Nachricht $ newsnew an die Spitze der news.txt Datei einfügt und wie man die alte untere Nachrichtendatei in der news.txt Datei löscht.

Gibt es eine Möglichkeit, dies zu tun, ohne die gesamte Datei zu löschen und alles wieder zu schreiben?

EDIT: Jede Nachricht ist nur eine kleine Zeichenfolge, sagen wir 500 Zeichen, eine einzelne Zeile.

Antwort

0

Verwenden Sie die Funktion file(), um die Elemente in news.txt als Array zu importieren, und array_unshift() zum Hinzufügen des neuen ersten Elements und array_pop() zum Entfernen des letzten Elements. Schließen Sie sich den Array wieder in einen einzelnen String und schreibt sie in NEWS.TXT:

$items = file('news.txt'); 
array_unshift($items, 'New item 1'); 
array_pop($items); 
$newstext = implode(PHP_EOL, $items); 
// write $newstext to the external file 
+0

Es ist der lange Weg, aber nahe genug, denke ich! – David19801

1

Verwenden Sie eine Datenbank.

Wenn Sie wirklich Textdateien verwenden müssen, eine andere Datei für jeden Nachrichten-Artikel verwenden und ihnen einen Namen geben sequentiell wie:

  • news001.txt
  • news002.txt
  • usw.

Dann können Sie einfach Dateien hinzufügen und löschen, das Verzeichnis lesen und anzeigen, was da ist.

0

Wenn dies eine XML-Datei ist, könnten Sie sie lesen, analysieren und das letzte Kind im DOM löschen. Aber wenn Sie alle Ihre Daten in einer DB haben, könnte es viel einfacher sein, die Datei jedes Mal neu zu schreiben.

EDIT: nach dem edit: ja, können Sie es wie folgt tun:

  • Ihre neue Zeile in eine neue Datei
  • lesen Sie die alte Datei Zeile für Zeile und schreiben Sie es auf die neue schreiben
  • die letzte Zeile (erfasst durch Zählen oder EOF) überspringen
  • löschen Sie die alte Datei und benennen Sie die neue
0

Nein, es ist nicht. Sie könnten jedoch in Betracht ziehen, die Nachrichten in umgekehrter Reihenfolge zu speichern. Auf diese Weise müssen Sie nur an news.txt anhängen, wenn neue Nachrichten ankommen.

+0

Ich dachte darüber nach, aber ist es eine Möglichkeit, die erste Zeile zu löschen, wenn ich die neue an den Boden anlege? – David19801

+0

@ David19801 Nein, aber es ist normalerweise nicht nötig, irgendetwas zu löschen. Wenn Sie nicht alle Nachrichten anzeigen möchten, suchen Sie einfach (z. B. 10kB vor dem Ende). – Oswald

0

Sie werden nicht in der Lage sein, den Anfang der Datei voranzustellen, ohne das Ganze noch einmal zu schreiben. Sie können an das Ende davon mit dem "a" -Modus-Flag an fopen() anhängen, aber immer noch das älteste Element zu löschen, müssen Sie die gesamte Datei erneut schreiben.

Wirklich, hier ist eine Datenbanklösung anstelle einer einzelnen Textdatei.

0

Es gibt viele Möglichkeiten, wie Sie es tun können, die flache Textdatei, aber ich bin nicht wirklich sicher, dass es es lohnt sich. Sie können eine leicht strukturierte Datei oder eine eingebettete Datenbank verwenden. Zum Beispiel SQLite, die es in der normalen Datei speichern würde, benötigt keine zusätzliche Einrichtung.