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|falseParameter
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
$filename | Ja | Pfad der zu schreibenden Datei. Wenn sie nicht existiert, erstellt PHP sie. |
$data | Ja | Die 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. |
$flags | Nein | Eine Bitmaske: FILE_APPEND, LOCK_EX und/oder FILE_USE_INCLUDE_PATH. Standard ist 0 (überschreiben). |
$context | Nein | Eine 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.txtDer 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 lineOhne 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
cherryHäufige Fehlerquellen
- Stiller Fehler bei Berechtigungen. Wenn das Verzeichnis nicht beschreibbar ist, gibt der Aufruf
falsezurü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 Sieerror_get_last(). - Das übergeordnete Verzeichnis muss existieren.
file_put_contents()erstellt die Datei, aber nicht fehlende Verzeichnisse. Rufen Sie bei Bedarf zuerstmkdir($dir, 0777, true)auf. FILE_APPENDist 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
''gibt0zurü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.