Tom: fwrite überschreibt den letzten Beitrag!

Beitrag lesen

Hello,

Ich kann nur wenig php und lerne noch, aber mein freund ist grade nicht zu erreichen sonst würd ich ihn ja fragen. kannst du mir bitte kurz genau sagen was ich ändern muss? Bitte =(

Ganz kurz wird das nicht gehen, weil Du noch zuviele Fehlerquellen vor Dir hast, die Dir hier noch niemand unter die Nase gerieben hat.

Der praktische Umgang mit Dateien hängt im Wesentlichen vom verfügbaren Hauptspeicher ab. Wenn man genug davon zur Verfügung hat, wird alles ganz einfach, weil man die Dateien dann vollständig einlesen kann. Wenn man im Verhältnis zur Größe der Dateien nicht genügend Hauptspeicher zur Verfügung hat, muss man sich auch seine Intelligenz besinnen und dann wird es wirklcih spannend.

Machen wir es also erstmla für Blöde *äh* entschuldige bitte, für Leute mit genügend Hauptspeicher.

Gehen wir mal davon aus, Deine Datei passt mehrfach und vollständig in den Hauptspeicher.
Dann können wir sie einfach auslesen und den neuen Satz davor einfügen:

$fh = fopen($dateiname, 'rb+');    ## vorhandene Datei zum Lesen und Schreiben öffnen
  flock($fh, LOCK_EX);               ## Dem System sagen, jetzt will ICH die Datei haben
                                     ## und soalange darf sie kein anderer benutzen
  $filesize = filesize($dateiname);  ## Die Größe der Datei abfragen, solange sie mir gehört
  $dateiinhalt = fread($fh, $filesize);  ## Den gesamten Inhalt der Datei auslesen
  fseek($fh, 0, SEEK_SET);           ## Den Dateizeiger wieder auf den Anfang zurückstellen
                                     ## weil er bem Lesen vserstellt worden ist
  fwrite($fh, $neuer_Satz . "\n" . $dateiinhalt);  ## Neuen datensatz, Satzendezeichen und
                                     ## alten Dateiinhalt in die Datei schreiben

( ftruncate($fh, neue Länge)       ## das dürfen wir uns hier sparen, weil die Datei

## eindeutig _verlängert_ wurde und keinesfalls
                                     ## verkürzt. Bitte fragen, wenn es nötig ist
  fclose($fh);                       ## Datei wieder schließen und Sperre ( flock() ) damit
                                     ## auch aufheben. (Bitte das flock nicht separat aufheben!)

So kann Dein Problem gelöst werden, wenn die Datei und einiges mehr vollständig in den Hauptspeicher passt.

Ein harzliches Glückauf

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de