Am Anfang der Datei schreiben

Hallo,
ich habe eine vorhandene Datei.
Diese Datei bekommt vom Nutzer Informationen, welche aber an den Anfang der Datei geschrieben werden sollen.
Derzeit löse ich das indem ich die Datei in ein Array auslese, die neue Info in die Datei schreibe [fopen (datei,„w“);] und dann das Array auslese und der Datei hinzufüge.

Kann ich das ganze auch einfacher lösen?
Dachte ich kann mit fseek den Dateizeigen an den Anfang setzten und dann losschreiben,
fseek (datei, 0) und dann fputs (datei, Info) schreibt aber auch nur ans Ende der Datei.

Danke für Tipps

Gruß

Marcel

Kann ich das ganze auch einfacher lösen?

versuch mal
fopen (datei,„r“);
und
rewind();

wobei eigentlich das fopen mit mode „r“ schon reichen sollte denk ich…
ich arbeite aber auch gerade mit Dateien die geschrieben werden… werd das wenn ich soweit bin auch mal testen…

fopen (datei, ‚r+‘)
Jo,
komisch, hätte ich auch drauf kommen können,
mit r+ schreibt er am Anfang…

Bedankt!!!

Gruß

Marcel

ich habe eine vorhandene Datei.
Diese Datei bekommt vom Nutzer Informationen, welche aber an
den Anfang der Datei geschrieben werden sollen.

das geht nur, wenn du die Daten in eine neue Datei schreibst, und die alten Daten danach hinten dran kopierst. Anschließend die Datei umbenennen.

Aber Achtung: ist nicht mehrplatzfähig, du musst noch einen Locking-Mechanismus haben, damit nicht versehentlich zwei Leute gleichzeitig das Skript aufrufen.

Gruß Marian

Hi,
danke,
scheitn zu stimmen,
bzw. mit der Array-Lösung funktioniert auch, aber foprn (datie, r+) funzt doch nicht, der zerbröselt mir immer die Datei…

Danke!

Doch nicht r+
Schade, r+ klappt doch nicht ganz,
der Anfang der Datei wird teilweise überschrieben, irgendwo hab ich da
wohl nen Fehler drin…

Schade, r+ klappt doch nicht ganz,
der Anfang der Datei wird teilweise überschrieben, irgendwo
hab ich da
wohl nen Fehler drin…

Hi,
was du möchtest ist ein einfügen am Anfang der Datei. Das geht aber nicht. Dein Anfangs beschriebener Weg ist schon richtig.
Nur würde ich die Datei lesen, den Header im Speicher hinzufügen (wenn die Dateien nicht zu gross sind), die neue Datei in eine tmp-Datei schreiben, die alte Datei löschen und anschließend die tmp-Datei wieder umbenennen. Das Ganze noch mit einem Fehlerhandler versehen falls die Datei im Mehrbenutzerbtrieb mal gelockt sein sollte.
Als Bonus kannst du auch noch überprüfen, ob die Datei zwischen lesen und schreiben von einem anderen Benutzer verändert worden ist.

Gruss
Quaser

Moin,

Schade, r+ klappt doch nicht ganz,
der Anfang der Datei wird teilweise überschrieben, irgendwo
hab ich da
wohl nen Fehler drin…

Logisch, dass das nicht hinhaut. Du überschreibst ja einfach nur mit den neuen Werten.
Wenn in der Inhalt deiner Datei z.B. lautet

123456

und der nächste Schreibbefehl mit r+ den Wert

7890

reinschreibt, dann steht jetzt in deiner Datei

789056

Du musst, bevor du den neuen Wert einträgst, die alten Werte löschen.

Funktioniert so:

$wert_neu = „Das neue Zeug“;

if(file_exists(„datei“))
{
$fp = fopen(„datei“,„r+“);
$wert_alt = file_get_contents($fp); //Bisherigen Inhalt in einen String einlesen
rewind($fp); //Dateizeiger zurück auf Los
fputs($fp,""); //Bisherigen Inhalt entfernen.
fputs($fp,$wert_neu); //neuen Wert in Datei schreiben
fclose($fp); //Datei schliessen
echo $wert_alt; //Ausgabe des alten Inhalts
}

Wenn du in der Datei Werte immer hintendran hängen willst, ersetzt du

$fp = fopen(„datei“,„r+“);

durch

$fp = fopen(„datei“,„a“);

,lässt den rewind-befehl weg, und ersetzt

fputs($fp,"");

durch

fputs($fp,"\n");

Gruß

widecrypt