W3docs

Einführung in die PHP-Dateierstellung und -Bearbeitung

Lernen Sie, wie Sie in PHP Dateien erstellen und schreiben – mit fopen(), fwrite(), fclose() und file_put_contents() für die Serverprogrammierung.

PHP läuft auf dem Server und kann daher echte Dateien auf der Festplatte lesen und schreiben – generierte Berichte, gecachtes HTML, Protokolleinträge, exportierte CSVs, hochgeladene Nutzerinhalte und Konfigurationsdateien. Dieses Kapitel behandelt den grundlegenden Arbeitsablauf zum Erstellen und Schreiben von Dateien: einen Datei-Handle mit dem richtigen Modus öffnen, Daten schreiben und den Handle schließen. Außerdem wird erklärt, wann die einfacheren einzeiligen Hilfsfunktionen besser geeignet sind.

In PHP gibt es zwei Familien von Werkzeugen zum Schreiben von Dateien:

  • Stream-Handlesfopen() / fwrite() / fclose(). Am besten geeignet, wenn Sie inkrementell schreiben (Protokollzeilen anfügen, große Ausgaben streamen) und eine feine Kontrolle über den Datei-Modus benötigen.
  • Einmalige Hilfsfunktionenfile_put_contents(). Am besten geeignet, wenn Sie den gesamten String im Speicher haben und ihn mit einem einzigen Aufruf in eine Datei schreiben möchten.

Wir beginnen mit dem Stream-Ansatz, da das Verstehen der Modi der Schlüssel zu allem anderen ist.

Eine Datei mit fopen() erstellen und schreiben

Um in eine Datei zu schreiben, öffnen Sie sie zunächst mit fopen(). Diese Funktion nimmt den Dateipfad und einen Modus-String entgegen und gibt einen Datei-Handle (eine Ressource) zurück, auf dem die anderen Funktionen operieren:

<?php
$file = fopen("example.txt", "w");   // open for writing, truncating the file
fwrite($file, "This is an example.\n");
fclose($file);                       // always close the handle

Was jede Zeile bewirkt:

  • fopen("example.txt", "w") öffnet example.txt im Schreibmodus. Wenn die Datei nicht existiert, wird sie erstellt; wenn sie existiert, wird ihr Inhalt gelöscht (auf null Länge gekürzt).
  • fwrite() schreibt den String in die Datei und gibt die Anzahl der geschriebenen Bytes zurück (oder false bei einem Fehler).
  • fclose() leert gepufferte Daten und gibt den Handle frei. Wenn dies ausgelassen wird, können Daten ungeschrieben bleiben, bis das Skript endet.

Ein relativer Pfad wie "example.txt" wird relativ zum aktuellen Arbeitsverzeichnis des Skripts aufgelöst. Zur Sicherheit und Vorhersehbarkeit sollten Sie einen absoluten Pfad bevorzugen, z. B. __DIR__ . "/example.txt".

Datei-Modi

Der Modus, den Sie an fopen() übergeben, bestimmt, ob die Datei erstellt, abgeschnitten oder angehängt wird und ob Sie sie lesen können. Dies sind die Modi, die für das Erstellen und Schreiben wichtig sind:

ModusBedeutungErstellt Datei?Vorhandener InhaltZeiger beginnt bei
"w"Nur schreibenJaGelöschtAnfang
"w+"Lesen + schreibenJaGelöschtAnfang
"a"Nur anhängenJaErhaltenEnde
"a+"Lesen + anhängenJaErhaltenEnde
"x"Nur schreiben, schlägt fehl, wenn Datei existiertJa (nur wenn neu)Anfang
"x+"Lesen + schreiben, schlägt fehl wenn existiertJa (nur wenn neu)Anfang

Verwenden Sie "x", wenn Sie eine vorhandene Datei nicht überschreiben dürfen – zum Beispiel beim Schreiben einer Sperrdatei. Verwenden Sie "a" für Protokolle, bei denen jeder Durchlauf zur Datei hinzufügen und sie nicht überschreiben soll.

Anhängen statt Überschreiben

Ein sehr häufiger Fehler ist die Verwendung von "w" für ein Protokoll und die Frage, warum die Datei immer nur eine Zeile enthält. Öffnen Sie mit "a", um den vorherigen Inhalt zu behalten und am Ende hinzuzufügen:

<?php
$log = fopen("app.log", "a");        // append mode — never erases
fwrite($log, "[" . date("Y-m-d H:i:s") . "] User logged in\n");
fclose($log);

Führen Sie dies zweimal aus und die Datei enthält zwei mit Zeitstempel versehene Zeilen statt einer.

Die Abkürzung: file_put_contents()

Wenn Sie den vollständigen Inhalt bereits als String vorliegen haben, erledigt file_put_contents() Öffnen, Schreiben und Schließen in einem einzigen Aufruf:

<?php
// Overwrite (or create) the file with this exact content:
file_put_contents("greeting.txt", "Hello, world!\n");

// Append instead of overwriting:
file_put_contents("app.log", "another line\n", FILE_APPEND);

Die Funktion gibt die Anzahl der geschriebenen Bytes zurück oder false bei einem Fehler. Dies ist die übersichtlichste Wahl für kleine, im Speicher vorhandene Daten. Greifen Sie auf fopen()/fwrite() zurück, wenn Sie in einer Schleife schreiben oder den Handle über mehrere Operationen hinweg offen halten müssen.

Das Geschriebene zurücklesen

Um einen Schreibvorgang zu bestätigen, öffnen Sie die Datei im Lesemodus ("r") und lesen Sie sie. Das Begleitkapitel PHP-Datei öffnen/lesen behandelt dies ausführlich, aber die Stream-Version lautet:

<?php
$file = fopen("example.txt", "r");
$contents = fread($file, filesize("example.txt"));
fclose($file);
echo $contents;

Hier liest fread() bis zu filesize("example.txt") Bytes – die gesamte Datei – in $contents. Für eine einzeilige Lösung liest file_get_contents() die gesamte Datei in einen String, ohne dass ein Handle verwaltet werden muss.

Fehler und fehlende Dateien behandeln

fopen() gibt false zurück (und gibt eine Warnung aus), wenn die Datei nicht geöffnet werden kann – falsche Berechtigungen, ein nicht vorhandenes Verzeichnis oder ein schreibgeschützter Datenträger. Überprüfen Sie dies immer, bevor Sie schreiben:

<?php
$file = fopen("/no/such/dir/example.txt", "w");
if ($file === false) {
    echo "Could not open the file for writing.";
} else {
    fwrite($file, "ok");
    fclose($file);
}

Bevor Sie eine Datei lesen, die Sie im selben Durchlauf nicht erstellt haben, bestätigen Sie mit file_exists() ihr Vorhandensein, um Warnungen von filesize() oder fread() zu vermeiden.

Weitere nützliche Dateifunktionen

Über das Erstellen und Schreiben hinaus bietet PHP ein vollständiges Werkzeugset für die Dateiverwaltung:

  • file_get_contents() — eine gesamte Datei in einem Aufruf in einen String lesen.
  • file_put_contents() — einen String in einem Aufruf in eine Datei schreiben.
  • file_exists() — prüfen, ob ein Pfad vorhanden ist, bevor darauf zugegriffen wird.
  • unlink() — eine Datei löschen.
  • rename() — eine Datei umbenennen oder verschieben.
  • copy() — eine Datei in einen neuen Pfad kopieren.

Für hochgeladene Dateien aus einem Formular, siehe PHP-Datei-Upload, und für einen umfassenderen Überblick über die Dateisystem-API, siehe PHP-Dateiverarbeitung.

Zusammenfassung

  • Öffnen Sie eine Datei mit fopen($path, $mode); der Modus steuert das Erstellen/Abschneiden/Anhängen.
  • Verwenden Sie "w" zum Überschreiben, "a" zum Anhängen und "x", um das Überschreiben einer vorhandenen Datei zu verweigern.
  • fwrite() schreibt und fclose() leert und gibt den Handle frei – immer schließen.
  • Für das Schreiben vollständiger Strings ist file_put_contents() die prägnante Ein-Aufruf-Alternative.
  • Überprüfen Sie den Rückgabewert von fopen() und verwenden Sie file_exists() für robusten, warnungsfreien Code.

Übungen

Übung
Welche Funktionen können verwendet werden, um in PHP in eine Datei zu schreiben?
Welche Funktionen können verwendet werden, um in PHP in eine Datei zu schreiben?
Was this page helpful?