PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : php, wie löscht man inhalte in datein?



shaddowghoul
20.12.04, 18:05
hi,
ich weiss ja wie man in datein schreibt.(per fwrite)
ich habe eine frage:
wie löscht man inhalte wieder?

Pingu
20.12.04, 18:23
hi,
ich weiss ja wie man in datein schreibt.(per fwrite)
ich habe eine frage:
wie löscht man inhalte wieder?
zum Beispiel indem man sie überschreibt. siehe fopen(): http://de2.php.net/manual/de/function.fopen.php
oder gleich ganz löscht - siehe unlink(): http://de2.php.net/manual/de/function.unlink.php

Pingu

shaddowghoul
20.12.04, 18:36
ähm,
ich wollte die datein aber nicht kommplett löschen,
sondern nur inhalte der datei entfernen.
also z.b.:
(inhalt der datei vorher : "test1234test")
inhaltloschen($fp, 4);
(inhalt der datei hinterher: "1234test")

wie kan ich sowas machen?

Scar KS
20.12.04, 18:44
Is ganz einfach lad dir Hirn v2.0 runter.
Nein, Scherz beiseite. Selbst ist der Programmierer heißt es so schön.
Liest die Datei aus. Arbeitest dann mit stringfunktionen wie (substr strfind strdelete) falls es die in PHP gibt.
Danach schreibste die Strings wieder in ne Datei.
Einfach ne? Musst nur mal nachdenken.
Für die ganzen Funktionen nach denen du sicher fragen wirst guckst du hier:
http://de2.php.net/manual/de/ref.strings.php
http://de2.php.net/manual/de/functions.php
Scar

shaddowghoul
20.12.04, 18:48
schön dadurch steht dann hinterher in der datei:
"test1234testtest1234test"
dadurch wird der inhalt nur verdoppelt. nicht verändert

Pingu
20.12.04, 18:59
Ich würde ersteinmal das Update nach V2.1 laden und installieren.
Danach würde ich mich einmal mit dem Manual (http://de2.php.net/manual/de/) und da speziell dem Abschnitt über das Filesystem (http://de2.php.net/manual/de/ref.filesystem.php). Da findet man dann ein sehr hilfreiche Funktion, die da heißt: rewind() (http://de2.php.net/manual/de/function.rewind.php) oder auch fseek() (http://de2.php.net/manual/de/function.fseek.php)
Alternativ könnte man natürlich eine zweite Datei öffnen und hinschreiben. Wenn fertig, die erste Löschen und die zweite in die erste Umbenennen. Dies hätte den Vorteil, daß falls etwas schief läuft ein Kopie zu haben.

Pingu

shaddowghoul
20.12.04, 19:24
aber fseek kenn ich schon,hilft mir nicht weiter.
ich brauche eine function zum löschen der inhalte.

Batosai
20.12.04, 19:31
aber fseek kenn ich schon,hilft mir nicht weiter.
ich brauche eine function zum löschen der inhalte.

na was an "stringfunktionen" hast du denn nicht verstanden?

also, ich erkläre es dir noch mal schritt für schritt:

1.) datei auslesen (in einen string)
2.) bspw. mit str_replace() den inhalt ersetzen
3.) die datei mit dem neuen string überschreiben

auf http://www.php.net/manual/de/ gibt es eine sehr ausführliche doku.
und wenn man da unter "Stringfunktionen" guckt, offenbaren sich viele viele nützliche funktionen mit denen man gaaannz tolle sachen anstellen kann. ;)

alles klar?
..hab doch gerne geholfen :)


gruß
Batosai

shaddowghoul
20.12.04, 19:38
überschreiben ist ja das wonach ich gefragt habe.
ich kenne nur die funktion fwrite zum schreiben.
die kann aber nicht überschreiben. sondern nur anhängen.
ich habe ja gerfagt wie der befehl/die funktion zum überschreiben ist, weil ich sie noch nicht kenne.

Tobiking
20.12.04, 19:46
fwrite ist schon die richtige funktion. Guck dir mal fopen in der php doku an:



'r' Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.
'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.
'w' Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.
'w+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
'a' Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
'a+' Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.

Wenn an die Datei angehängt wird öffnest du warscheinlich mit a oder a+. Das heißt entweder mit fseek an den anfang der datei springen oder mit w/w+ öffnen.

Batosai
20.12.04, 19:52
überschreiben ist ja das wonach ich gefragt habe.
ich kenne nur die funktion fwrite zum schreiben.
die kann aber nicht überschreiben. sondern nur anhängen.
ich habe ja gerfagt wie der befehl/die funktion zum überschreiben ist, weil ich sie noch nicht kenne.

öhm.. indem du die datei im modus 'w' öffnest!?


resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]])

'w' Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.


das du die datei vorher einlesen solltest is klar! (ich sagst nur um sicher zu gehen) ;)


gruß
Batosai

shaddowghoul
20.12.04, 19:53
ja, ich öffne sie mit "a".
wenn ich mit fseek an den anfang springe,
und dann mit fwrite "hallo" an den anfang schreibe,
sieht die datei hinterher so aus: hallotest1234test.
wie gesagt: es wird nicht überschrieben,
sondern angehängt.(oder im diesem fall vorangesetzt)

shaddowghoul
20.12.04, 20:05
ja, aber ich wollte die datein nicht kommplett neu schreiben,
sondern nur überschreiben/verändern.(hab ich wohl oft genug gesagt)

Batosai
20.12.04, 20:24
ja, aber ich wollte die datein nicht kommplett neu schreiben,
sondern nur überschreiben/verändern.(hab ich wohl oft genug gesagt)

Irgendwie versteh ich dein problem nicht.
wenn du das hallo an den anfang haben willst, und danach nichts mehr, was spricht dann dagegen die dateigröße auf 0 zu setzen und den veränderten string da rein zu schreiben?

und wenn du das hallo an eine beliebige position in der datei haben willst, was spricht dann dagegen den dateizeiger mit fseek an diese position zu setzen und da hallo rein zu schreiben?
und wenn du das was da steht nicht überschreiben willst, sondern das hallo gewissermaßen dazwischen, was spricht dann dagegen die datei von der position an in einen string zu lesen und diesen nach dem hallo hinzuschreiben?

und wenn dabei noch was in der datei stehen bleiben würde, dann kürze sie einfach auf die gewünschte länge mit ftruncate()


du hast soviele möglichkeiten...
Batosai

shaddowghoul
20.12.04, 20:33
nein,
ich will das in meiner datei 1234(in der mitte) durch hallo ERSETZT wird.
also 1234 RAUS. und hallo an der gleichen stelle REIN.

Batosai
20.12.04, 20:39
nein,
ich will das in meiner datei 1234(in der mitte) durch hallo ERSETZT wird.
also 1234 RAUS. und hallo an der gleichen stelle REIN.

Bist du wirklich so blöd, oder tust du nur so?
wie wäre es wenn du mal lesen würdest was ich schreibe?

Dateizeiger mit fseek an die stelle wo 1234 steht setzen und dann hallo in die datei schreiben -> 1234 wird ersetzt durch hallo

und wo ist jetzt das problem dabei?


Batosai

shaddowghoul
20.12.04, 20:42
dass problem ist das meine datei hinterher so aussieht:
testhallo1234test
aber das 1234 hat da drinne nichts zu suchen.
und ich weiss ja auch nicht wie ich es da rauskriege.

Pingu
20.12.04, 22:20
Um das mal hier abzukürzen: So wie Du Dir das vorstellst geht das nicht und ging das noch nie egal in welcher Sprache.

Besuche einen Programmierkurs in der Schule, VHS, Uni, ... Deines vertrauens.

Pingu

PS: Dies ist kein Programmierforum. Das Programmierforum ist bei http://www.mrunix.de zu finden.Dies steht auch auf der Forumspage.

EDIT: Damit Du nicht ganz dumm stirbst hier die quick'n'dirty Variante:


<?php

$fileName = "test.txt";
$searchStr = "1234";
$replaceStr = "Hallo";
$newContent = str_replace($searchStr, $replaceStr, implode("", file($fileName)));
fwrite($fp = fopen($fileName, "w"), $newContent);
fclose($fp);


?>