fputs hängt parameter an, aber überschreibt ihn nicht
AIR2
- php
Hallo.
per fopen öffne ich eine txt-Datei
mit fgets lese ich den inhalt (EINE Zahl) in eine Variable
mit $VARIABLE++ erhöhe ich die Zahl um 1
mit fputs schreibe ich die um 1 erhöhte Variable in die txt-Datei
und schließlich schliesse ich mit fclose die Datei wieder
und nun sehe ich, daß fputs die Variable anhängt, aber nicht überschreibt.
Am Anfang ist 0 in der Datei
Dann ist 01 in der Datei
Dann 012 in der D.
dann 01213 in d. D.
dann 012131214 in der Datei
also wollte ich vor dem fputs befehl die Datei leeren per ftruncate($Datei,'0'); . Doch dann war da plötzlich ein Leerzeichen, aber die 0 war weg, was ich ja wollte ;-)
Meine Frage: Kann man nur den Inhalt einer Datei löschen aber die Datei selber nicht?
Und warum hängt fputs den übergebenen Parameter AN, aber überschreibt ihn nicht?
hi,
Und warum hängt fputs den übergebenen Parameter AN, aber überschreibt ihn nicht?
vermutlich, weil du die datei in einem ungeeigneten modus geöffnet hast.
aber welchen du benutzt hast, hast du uns ja leider nicht verraten ...
gruß,
wahsaga
aber welchen du benutzt hast, hast du uns ja leider nicht verraten ...
Sorry... Nachtrag:
$db_file_w="db/count/Datei.txt";
$db_opened_w=fopen($db_file_w,"r+b");
$number=(integer)fgets($db_opened_w,4);
$number++;
fputs($db_opened_w,$number);
fclose($db_opened_w);
Wie gesagt, der inhalt der datei ist ursprünglich 0 .
Moin!
per fopen öffne ich eine txt-Datei
Meine Frage: Kann man nur den Inhalt einer Datei löschen aber die Datei selber nicht?
schaue ma bei der function fopen() nach. da steht was über den parameter 'mode' in der Funktion.
tschüssi
ichen
Moin!
schaue ma bei der function fopen() nach.
Weißt du wie oft ich da schon war in der zeit in der das Forum offline war? Nicht bös gemeint, nur: Ich kenne den Text inzwischen auswendig...
Ich habe den parameter r+ gewählt mit einem b hinten dran, weil ich windows benutze
Moin AIR2
Ich habe den parameter r+ gewählt mit einem b hinten dran, weil ich windows benutze
parameter r öffnet lesend
parameter + hängt an
B = Binäry und hat nichts mit Windoof zu tun
Öffne deine datei mit r und lese, dann schließen und wieder mit w schreiben. Ansonsten must du den Dateizeiger auf den Anfang setzten, dann klappts auch mit dem überschreiben.
regds
Mike©
Moin AIR2
Hallo auch!
B = Binäry und hat nichts mit Windoof zu tun
Wirklich nicht?
Ausschnitt aus der fopen-definition auch www.php.net:
"
Zusätzlich kann mode der Buchstabe 'b' hinzugefügt werden, der die Behandlung von Binärdateien erlaubt. Dies ist nur auf Systemen sinnvoll, welche zwischen Binär- und Text-Dateien unterscheiden (z.B. Windows. Ist bei Unix sinnlos).
"
Öffne deine datei mit r und lese, dann schließen und wieder mit w schreiben. Ansonsten must du den Dateizeiger auf den Anfang setzten, dann klappts auch mit dem überschreiben.
Danke. ich versuchs mal so!
Moin AIR2
Wirklich nicht?
Zusätzlich kann mode der Buchstabe 'b' hinzugefügt werden, der die Behandlung von Binärdateien erlaubt. Dies ist nur auf Systemen sinnvoll, welche zwischen Binär- und Text-Dateien unterscheiden (z.B. Windows. Ist bei Unix sinnlos).
Siehste! Du möchtest eine Textdatei schreiben und keine Binärdatei. So wie du es erwähnt hast würde es bedeuten das Windoof immer ein b verlangt. Dies ist allerdings nur bei Binär nötig.
regds
Mike©
Öffne deine datei mit r und lese, dann schließen und wieder mit w schreiben. Ansonsten must du den Dateizeiger auf den Anfang setzten, dann klappts auch mit dem überschreiben.
Ich glaubs nicht!!!! Es funktioniert *MEGAFREU* !!!!!! Vielen Vielen Dank, mike!!!!
Hello,
Ich habe den parameter r+ gewählt mit einem b hinten dran, weil ich windows benutze
parameter r öffnet lesend
parameter + hängt an
B = Binäry und hat nichts mit Windoof zu tunÖffne deine datei mit r und lese, dann schließen und wieder mit w schreiben. Ansonsten must du den Dateizeiger auf den Anfang setzten, dann klappts auch mit dem überschreiben.
die Modi:
r nur zum Lesen, nicht zerstörende Öffnung
w nur zum Schreiben, ZERSTÖRENDE Öffnung
a nur (zum Erzeugen) und Anhängen, eigentllich ursprünglich nur für Textdateien,
nicht zerstörend, nach Behebung eines Bugs ist es nicht mehr möglich, in die bereits
vor der Öffnung vorhandenen Daten hineizuschreiben.
x neuer Modus (zum Anlegen) + Schreiben, nicht zerstörend
r+ auch zum Schreiben, nicht zerstörende Öffnung, Zum Schreiben wahlfreier Zugriff
auf den gesamten Bereich der Datei
w+ auch zum Lesen der gerade geschriebenen Daten
a+ auch zum Lesen aller verfügbarer Daten der Datei
x+ auch zum Lesen aller verfügbaren Daten in der Datei
b bedeutet "binäre Öffnung" und sollte besser IMMER benutzt werden, da anderenfalls
bei Windows eine unerwünschte Interpretation der Textdaten als _Zeilendatenn_
durchgeführt wird und die Zeilenendezeichen auf Windows-Standard umgewandelt werden
Das führ auf jeden Fall zu fehlern, wenn man z.B.Bilder speichert, in deren Stream die
Zeichen (10) und (13) dezimal ASCII ja auch einzeln vorkommen können.
fputs() ist eigentlich ursprünglich auch nur für Textdateien und zeilenweises Schreiben gewesen.
Wenn immer hinten angehängt wird, kann das auch als Ursache haben, dass der Dateizeiger noch vom Lesevorgang hinter der Datei steht. Der muss dann voerher eben erst wieder passend positioniert werden. Der Modus (rb+) oder (r+b), das sollte beides funktionieren, ist geeignet, eine Datei zu öffnen un djedes beliebige Byte der Datei auszutauschen. Schau Dir auch fseek() an.
Außerdem solltest Du die englische Version http://de.php.net/manual/en/function.fopen.php bevorzugen. In deutschen fehlt noch ein großer Teil an Beschreibungen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom