W3docs

PHP-Datei öffnen: Anleitung zum Lesen und Schreiben von Dateien in PHP

PHP bietet stabile Funktionen zum Arbeiten mit Dateien. Dieser Artikel erklärt fopen(), fread(), fwrite() und die Fehlerbehandlung.

Das Lesen und Schreiben von Dateien gehört zu den häufigsten Aufgaben in der serverseitigen Programmierung: Sie speichern hochgeladene Dokumente, erstellen Logs, cachen Daten und lesen Konfigurationsdateien. PHP stellt dafür eine kleine, stabile Sammlung von Funktionen bereit, die alle mit einem einzigen Aufruf beginnen — fopen(). Dieses Kapitel erklärt, wie Sie eine Datei öffnen, aus ihr lesen, in sie schreiben, Daten anhängen, sie schließen und die Fehler behandeln, auf die Sie unweigerlich stoßen werden.

Die Funktion fopen() verstehen

Die Funktion fopen() öffnet eine Datei (oder eine URL) und gibt ein Datei-Handle zurück — eine Ressource, die Sie an alle anderen Dateifunktionen übergeben. Sie erwartet zwei Pflichtargumente: den Pfad zur Datei und den Modus, der bestimmt, was Sie damit tun dürfen und wo der interne Dateizeiger (der Cursor, der Ihre Position markiert) beginnt.

$handle = fopen("example.txt", "r");

Wenn die Datei nicht geöffnet werden kann, gibt fopen() false zurück und gibt eine Warnung aus. Daher sollten Sie den Rückgabewert immer prüfen, bevor Sie das Handle verwenden.

Dateimodi

Der Modus ist das wichtigste Argument: Er legt fest, ob die Datei gelesen, überschrieben oder ergänzt wird, und ob eine fehlende Datei erstellt wird.

ModusLesenSchreibenZeiger beginnt beiKürzt?Erstellt, wenn nicht vorhanden?
rjaneinAnfangneinnein (schlägt fehl)
r+jajaAnfangneinnein (schlägt fehl)
wneinjaAnfangjaja
w+jajaAnfangjaja
aneinjaEndeneinja
a+jajaEndeneinja
xneinjaAnfangn/aja (schlägt fehl, wenn vorhanden)
x+jajaAnfangn/aja (schlägt fehl, wenn vorhanden)

Einige wichtige Regeln:

  • Verwenden Sie r, wenn die Datei bereits vorhanden sein muss und Sie sie nur lesen möchten.
  • w und w+ löschen den Dateiinhalt beim Öffnen — verwenden Sie diese Modi niemals, wenn Sie vorhandene Daten erhalten möchten.
  • a und a+ sind die sichere Wahl für Logs: Sie schreiben immer ans Ende und kürzen nie.
  • x und x+ schützen davor, versehentlich eine vorhandene Datei zu überschreiben, was bei „einmaligen Erstellungs"-Operationen nützlich ist.

Hinweis: Unter Windows hängen Sie b an den Modus an (z. B. rb, wb, ab), um die Datei im Binärmodus zu öffnen und eine Zeilenumbruch-Übersetzung zu verhindern, die Nicht-Textdateien beschädigen kann. Unter Linux und macOS ist das Flag b harmlos, sodass es überall hinzuzufügen Ihren Code portabel hält.

Dateien in PHP lesen

Um eine Datei zu lesen, öffnen Sie sie im Lesemodus (r) und verwenden fread(). fread() nimmt das Datei-Handle und die Anzahl der zu lesenden Bytes; in Kombination mit filesize() wird die gesamte Datei auf einmal gelesen.

Hier ist ein Beispiel, das den gesamten Inhalt einer Datei liest:

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

Eine Datei zeilenweise lesen

Bei großen Dateien ist es verschwenderisch, alles in den Speicher zu laden. Verwenden Sie fgets(), um eine Zeile nach der anderen zu lesen, und feof() ("end of file"), um anzuhalten, wenn Sie das Ende erreichen:

<?php
$file = fopen("example.txt", "r");
if ($file) {
    while (!feof($file)) {
        $line = fgets($file);
        echo $line;
    }
    fclose($file);
}
?>

Die kürzere Alternative: file_get_contents()

Für einfache Lesevorgänge, bei denen Sie die gesamte Datei als String benötigen, erledigt file_get_contents() das Öffnen, Lesen und Schließen in einem einzigen Aufruf:

<?php
$contents = file_get_contents("example.txt");
echo $contents;
?>

Verwenden Sie fopen() + fread()/fgets(), wenn Sie eine detaillierte Kontrolle benötigen (Streaming, teilweises Lesen, Sperren); greifen Sie auf file_get_contents() zurück, wenn Sie einfach den Text der Datei möchten.

Dateien in PHP schreiben

Um in eine Datei zu schreiben, öffnen Sie sie im Schreibmodus (w) und verwenden fwrite(). fwrite() nimmt das Datei-Handle und den zu schreibenden String und gibt die Anzahl der geschriebenen Bytes zurück (oder false bei einem Fehler). Beachten Sie, dass w die Datei zuerst kürzt, sodass immer mit einer leeren Datei begonnen wird.

Hier ist ein Beispiel, das Daten in eine Datei schreibt:

<?php
$file = fopen("example.txt", "w");
if ($file) {
    fwrite($file, "This is some data.");
    fclose($file);
}
?>

Genau wie beim Lesen gibt es eine Einzeilen-Abkürzung zum Schreiben: file_put_contents() öffnet, schreibt und schließt die Datei in einer einzigen Anweisung.

Daten an Dateien in PHP anhängen

Um Daten an eine Datei in PHP anzuhängen, können Sie die Funktion fopen() im Append-Modus (a) und die Funktion fwrite() verwenden. Damit können Sie Daten ans Ende einer Datei anhängen, anstatt sie zu überschreiben.

Hier ist ein Beispiel, das Daten an eine Datei anhängt:

<?php
$file = fopen("example.txt", "a");
if ($file) {
    fwrite($file, "This is some additional data.");
    fclose($file);
}
?>

Dateien in PHP schließen

Es ist wichtig, eine Datei zu schließen, nachdem Sie mit ihr fertig sind, um Systemressourcen freizugeben und Datenbeschädigungen zu verhindern. Dies geschieht mit der Funktion fclose(), die den von fopen() zurückgegebenen Dateizeiger als Argument entgegennimmt.

Hier ist ein Beispiel, das die korrekte Vorgehensweise zum Schließen einer Datei in PHP demonstriert:

<?php
$file = fopen("example.txt", "r");
if ($file) {
    // Perform file operations here
    fclose($file);
    echo "File closed successfully.";
}
?>

Fehlerbehandlung in PHP

Es ist wichtig, Fehler beim Arbeiten mit Dateien in PHP ordnungsgemäß zu behandeln. Wenn Sie beispielsweise versuchen, eine nicht vorhandene Datei zu öffnen, oder wenn Sie versuchen, in eine nicht beschreibbare Datei zu schreiben, erhalten Sie einen Fehler.

Zur Fehlerbehandlung können Sie die if-Anweisung und die Variable $file verwenden, die von fopen() zurückgegeben wird. Wenn fopen() false zurückgibt, ist ein Fehler aufgetreten. In Produktionsumgebungen können Sie den @-Fehlerunterdrückungsoperator verwenden oder einen benutzerdefinierten Fehler-Handler konfigurieren, um Warnungen ohne Unterbrechung des Seitenlayouts zu behandeln.

Hier ist ein Beispiel, das die Fehlerbehandlung in PHP demonstriert:

<?php
$file = fopen("example.txt", "r");
if ($file) {
    $contents = fread($file, filesize("example.txt"));
    fclose($file);
    echo $contents;
} else {
    echo "Error: Unable to open file.";
}
?>

Zusammenfassung

fopen() ist die Grundlage der Dateiverarbeitung in PHP. Der gewählte Modus entscheidet alles: r liest, w überschreibt, a hängt an, und x erstellt eine Datei nur dann, wenn sie noch nicht vorhanden ist. Lesen Sie mit fread()/fgets(), schreiben Sie mit fwrite(), prüfen Sie immer, ob das Handle gültig ist, und schließen Sie es mit fclose(), wenn Sie fertig sind. Für einfache Einzel-Lese- und Schreibvorgänge bevorzugen Sie file_get_contents() und file_put_contents().

Für weiterführende Informationen siehe fopen(), fread() und fwrite() sowie die übergeordneten Kapitel PHP File Handling und PHP Filesystem.

Übungen

Übung
Welche Funktionen werden in PHP zum Öffnen oder Lesen einer Datei verwendet?
Welche Funktionen werden in PHP zum Öffnen oder Lesen einer Datei verwendet?
Was this page helpful?