W3docs

file_put_contents()

Die PHP-Funktion file_put_contents() schreibt Daten in eine Datei, erstellt sie bei Bedarf und überschreibt vorhandene Inhalte.

Die Funktion file_put_contents() schreibt einen string in einer einzigen Anweisung in eine Datei. Sie ist der moderne Einzeiler-Ersatz für die klassische Sequenz fopen()fwrite()fclose(): PHP öffnet die Datei, schreibt die Daten und schließt den Handle für Sie. Diese Seite behandelt Syntax, Parameter, Rückgabewert, Flags zum Anhängen und Sperren sowie die häufigsten Fehlerquellen.

Syntax

file_put_contents(string $filename, mixed $data, int $flags = 0, ?resource $context = null): int|false

Parameter

ParameterErforderlichBeschreibung
$filenameJaPfad der zu schreibenden Datei. Wenn sie nicht existiert, erstellt PHP sie.
$dataJaDie zu schreibenden Daten — ein string, ein array von Strings (ohne Trennzeichen zusammengefügt, wie implode('', $array)), oder eine Stream-Ressource, deren verbleibende Inhalte kopiert werden.
$flagsNeinEine Bitmaske: FILE_APPEND, LOCK_EX und/oder FILE_USE_INCLUDE_PATH. Standard ist 0 (überschreiben).
$contextNeinEine Stream-Kontext-Ressource, erstellt mit stream_context_create(), zum Beispiel um HTTP-Header beim Schreiben in einen Remote-Stream zu setzen.

Rückgabewert

file_put_contents() gibt die Anzahl der geschriebenen Bytes zurück oder false bei einem Fehler. Da 0 ein gültiges (falsy) Ergebnis ist, wenn Sie einen leeren string schreiben, prüfen Sie Fehler immer mit dem strikten Vergleich === false und nicht mit einem losen Wahrheitswert-Test.

Eine Datei schreiben

Standardmäßig überschreibt die Funktion den bestehenden Inhalt der Datei (oder erstellt die Datei, wenn sie nicht vorhanden ist):

<?php

$filename = 'myfile.txt';
$data     = 'This is some data to be written to the file.';

$bytes = file_put_contents($filename, $data);

if ($bytes === false) {
    echo "Failed to write to $filename";
} else {
    echo "Wrote $bytes bytes to $filename";
}

Ausgabe:

Wrote 44 bytes to myfile.txt

Der zurückgegebene Zähler 44 entspricht der Länge des string in Bytes.

Anhängen statt Überschreiben

Übergeben Sie das Flag FILE_APPEND, um Daten ans Ende der Datei anzuhängen, anstatt den Inhalt zu ersetzen — praktisch für Log-Dateien:

<?php

$log = 'app.log';

file_put_contents($log, "First line\n", FILE_APPEND);
file_put_contents($log, "Second line\n", FILE_APPEND);

echo file_get_contents($log);

Ausgabe:

First line
Second line

Ohne FILE_APPEND würde der zweite Aufruf die erste Zeile löschen.

Die Datei beim Schreiben sperren

Wenn mehrere Prozesse gleichzeitig in dieselbe Datei schreiben könnten, fügen Sie LOCK_EX hinzu, um eine exklusive Sperre für die Dauer des Schreibvorgangs zu erwerben. Kombinieren Sie Flags mit dem bitweisen OR-Operator (|):

<?php

file_put_contents('counter.txt', "ping\n", FILE_APPEND | LOCK_EX);

Dies verhindert, dass zwei Schreibende ihre Ausgaben vermischen und die Datei beschädigen.

Ein Array schreiben

Wenn $data ein array ist, werden seine string-Elemente ohne Trennzeichen zusammengefügt. Fügen Sie selbst Trennzeichen hinzu, wenn Sie Begrenzer benötigen:

<?php

$lines = ['apple', 'banana', 'cherry'];

file_put_contents('fruits.txt', implode("\n", $lines));

echo file_get_contents('fruits.txt');

Ausgabe:

apple
banana
cherry

Häufige Fehlerquellen

  • Stiller Fehler bei Berechtigungen. Wenn das Verzeichnis nicht beschreibbar ist, gibt der Aufruf false zurück und gibt eine Warnung aus — es wird keine Exception geworfen. Prüfen Sie den Rückgabewert (=== false) oder kapseln Sie den Aufruf und prüfen Sie error_get_last().
  • Das übergeordnete Verzeichnis muss existieren. file_put_contents() erstellt die Datei, aber nicht fehlende Verzeichnisse. Rufen Sie bei Bedarf zuerst mkdir($dir, 0777, true) auf.
  • FILE_APPEND ist nicht dasselbe wie Überschreiben. Das Vergessen des Flags ist die häufigste Ursache für „mein Log wird immer wieder gelöscht".
  • Leere Daten sind gültig. Das Schreiben von '' gibt 0 zurück, was falsy ist — verwenden Sie === false, damit Sie einen erfolgreichen leeren Schreibvorgang nicht mit einem Fehler verwechseln.

Verwandte Funktionen

  • file_get_contents() — das Lese-Gegenstück, das eine ganze Datei in einen string einliest.
  • fwrite() — Low-Level-Schreiben, wenn Sie einen offenen Handle benötigen (z. B. viele kleine Schreibvorgänge in einer Schleife).
  • fopen() — einen Datei-Handle zum gestreamten Lesen oder Schreiben öffnen.
  • file_exists() — prüfen, ob eine Datei vorhanden ist, bevor Sie schreiben.

Fazit

file_put_contents() ist der einfachste Weg, einen string in PHP in eine Datei zu schreiben: Ein Aufruf öffnet, schreibt und schließt die Datei. Verwenden Sie FILE_APPEND, um an eine Datei anzuhängen, LOCK_EX für gleichzeitige Schreibende, und prüfen Sie den Erfolg immer mit einem strikten === false-Vergleich.

Übungen

Übung
Was macht die PHP-Funktion file_put_contents()?
Was macht die PHP-Funktion file_put_contents()?
Was this page helpful?