dedlfix: PHP Starthilfe

Beitrag lesen

Hi!

fopen(), fwrite() und fclose() sind die deine Freunde.
Ergänzend zu dem bereits verlinkten Formmailer sind das etwa 3 Zeilen extra Code.
file_put_contents() ist nur eine.
Wenn das File sowieso einfach hart ersetzt werden soll ist das richtig ja - allerdings ist der Lerneffekt beim Verwenden der einzelnen Funktionen größer.

Achwas, nur der Aufwand ist größer. Und wenn es nicht komplett ersetzt sondern nur teilweise umgeschrieben werden soll, reichen deine drei Funktionen auch nicht. Auch dann arbeitet es sich mit file_get/put_contents() problemlos(er). Wenn du mit Einzelschritten blockweise liest, musst du beim Suchen die Blockgrenzen beachten. Wenn du blockweise alles in einen String liest, um erst dann in ihm die passende Stelle zu suchen, kannst du gleich file_get_contents() nehmen. Und dann hast du auch noch eine Textdatei und keine, in der du mal eben einen von der Größe her definierten Block überschreiben kannst, sondern du musst ab deiner Änderung den gesamten Rest neu schreiben. Ohne Zwischenablage des gesamten Textes in einem String brauchst du dafür zwei Handles, eins zum Lesen und eine zweite Datei zum Schreiben des neuen Inhalts und noch ein Datei-Umbenennen nebst Löschen. Nix ist mit drei Zeilen. Zudem müsste man für ein "richtigen" Lerneffekt noch File-Locking in Betracht ziehen. Doch im gefragten Szenario halte ich das für verzichtbar. Selbst wenn, ist man bei file_put_contents() mit einem zusätzlichen Flag schnell fertig.

Die Einzelfunktionen haben zudem den Vorteil, dass sie bei wiederholten Schreibvorgängen schneller sind - z.B. wenn man eine Import-Routine schreibt, die z.B. ein CSV in Liste an SQL-Statements umformt oder ähnliches und diese per Schleife durchläuft und jede Zeile einzeln schreibt.

Das Szenario haben wir gerade nicht. Zudem braucht es auch eine kritische Masse, ab der sich diese Vorgehensweise erst auszahlt.

Ebenso hat es Vorteile, wenn man den Fileinhalt zuvor lesen muss und dann in dasselbe File schreiben (möglicherweise an einer bestimmten Stelle).

Einfach eine separate Datei anlegen, die komplett getauscht werden kann und mit include in die eigentliche Datei einladen, ist der geringste Aufwand.

Lo!