4.9.3 Dateien lesen und schreiben
Um Dateien vollständig zu lesen oder zu schreiben, sprich ohne sich viel Gedanken um einen Dateizeiger machen zu müssen, kann man die folgenden Befehle nutzen. Diese bieten einen einfachen und schnellen Weg, Daten zu lesen oder zu schreiben.
Dateien lesen und schreiben, einfache Funktionen
Funktion | Beschreibung |
---|---|
file_get_contents() | Liest den Inhalt einer Datei in einen String. |
file_put_contents() | Schreibt den Inhalt einer String-, oder Array-Variable in eine Datei. |
file() | Liest eine ganze Datei zeilenweise in ein Array. |
file_exists() | Prüft, ob eine Datei existiert. |
Somit lassen sich recht einfach Text oder Daten in eine Datei schreiben und wieder auslesen.
Beispiel
Text in Datei a.txt schreiben und auslesen:
Ausgabe:
Dies ist ein Beispiel-Text. Zweite Zeile
file()
Beim Auslesen gibt es neben der Funktion file_get_contents()
auch die Möglichkeit, die Funktion file()
zu nutzen. Dabei unterscheiden sich die beiden hauptsächlich in der Art der Ausgabe. Während die Funktion file_get_contents()
den Inhalt der Datei als String zurück gibt, gibt die Funktion file()
den Inhalt der Datei als Array zurück. Dabei enthält jedes Element des Arrays eine Zeile des Dateiinhalts, was manchmal sehr praktisch ist!
Beispiel
Eine Datei auslesen mit file()
Ausgabe:
Array ( [0] => Dies ist ein Beispiel-Text. [1] => Zweite Zeile )
readfile()
Auch mit readfile() kann eine Datei einfach ausgelesen werden. Dabei hat readfile()
die Eigenart, dass die Datei direkt auf dem Browser ausgegeben wird, also ohne die Verwendung von print_r()
. Damit eignet sich readfile()
vorallem zum Debugging, um schnell mal festzustellen, was sich in der Datei befindet.
Im Gegensatz zu file_get_contents()
, die den Inhalt in einen String liest, sendet readfile()
den Inhalt direkt an den Output-Buffer, was in einigen Fällen effizienter sein kann, besonders wenn es um die Ausgabe größerer Dateien geht.
Beispiel
Eine Datei direkt ausgeben mit readfile()
Ausgabe:
Dies ist ein Beispiel-Text. Zweite Zeile
Dies ist besonders praktisch, wenn Dateien wie Bilder oder PDFs ausgegeben werden sollen, ohne dass sie zuerst komplett in den Speicher geladen werden müssen. Stattdessen wird die Datei direkt an den Client gestreamt.
Beispiel
Ein Bild direkt an den Browser senden:
Dabei ist zu beachten, dass vor dem Aufruf von readfile()
keine weiteren Ausgaben stattgefunden haben dürfen, da sonst der HTTP-Header nicht korrekt gesetzt werden kann.
Hinweis
PHP bietet umfangreiche Möglichkeiten zum Lesen und Schreiben von Dateien, die von einfachen Textdateien bis zu komplexeren Datenformaten und binären Dateien reichen. Es ist wichtig, die richtige Funktion für den jeweiligen Anwendungsfall zu wählen, um die Performance und Effizienz der Anwendung zu optimieren.
Teile einer Datei auslesen
Sind jedoch nur Teile einer Datei von Interesse, kann man die folgenden Befehle in Kombination verwenden. Hiermit sind weitaus komplexere Abfragen und Zugriffe auf Dateien möglich.
Funktion | Beschreibung |
---|---|
fopen() | Öffnet eine Datei |
feof() | Prüft, ob der Dateizeiger am Ende der Datei steht |
fgets() | Liest eine Zeile von Beginn des Dateizeigers |
fread() | Liest Binärdaten aus einer Datei |
fwrite() | Schreibt den Inhalt einer Zeichenkette in eine Datei. Die Zeichenkette kann auch binäre Daten enthalten (= Binär-sicheres Schreiben). |
fclose() | Schließt den geöffneten Dateizeiger |
Für fopen("Dateiname", "Aktion")
sind folgende Aktionen zugelassen:
Aktion | Beschreibung vom Manual |
---|---|
r |
Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei. |
r+ |
Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei. |
w |
Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen. |
w+ |
Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen. |
a |
Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen. |
a+ |
Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen. |
Beispiel
Eine Datei zeilenweise auslesen und auf dem Browser ausgeben.
Ausgabe (der zuvor angelegten Datei a.txt):
Dies ist ein Beispiel-Text.
Zweite Zeile