file()
Die Funktion file() liest den Inhalt einer Datei und speichert ihn in einem array. Erfahren Sie, wie Sie sie in PHP effektiv einsetzen.
Was ist die Funktion file()?
Die Funktion file() liest eine gesamte Datei in ein array ein, wobei jedes Element des Arrays einer Zeile der Datei entspricht. Sie ist der schnellste Weg, die Zeilen einer Datei in einem einzigen Aufruf in ein PHP-array zu überführen — Sie müssen kein Handle öffnen, mit fgets() in einer Schleife iterieren oder danach etwas schließen.
Greifen Sie auf file() zurück, wenn Sie eine Datei zeilenweise verarbeiten möchten: Zeilen zählen, Zeilen filtern, eine Werteliste einlesen oder ein kleines Log parsen. Wenn Sie statt eines Arrays einen einzigen langen string benötigen, verwenden Sie file_get_contents(); um eine Datei in einem Aufruf zu schreiben, verwenden Sie file_put_contents().
Syntax
file(string $filename, int $flags = 0, ?resource $context = null): array|false| Parameter | Beschreibung |
|---|---|
$filename | Pfad zur einzulesenden Datei. Kann ein lokaler Pfad oder eine URL sein (sofern allow_url_fopen aktiviert ist). |
$flags | Optional. Ein oder mehrere Flags, kombiniert mit dem bitweisen OR-Operator (|). Siehe die nachfolgende Tabelle. |
$context | Optional. Eine Stream-Kontext-Ressource, erstellt mit stream_context_create(). |
Rückgabewert: ein array mit Zeilen oder false bei einem Fehler (z. B. wenn die Datei nicht existiert). Standardmäßig behält jede Zeile ihren abschließenden Zeilenumbruch (\n).
Der Parameter flags
$flags ermöglicht die Steuerung, wie Zeilen eingelesen werden. Kombinieren Sie sie mit |:
| Flag | Auswirkung |
|---|---|
FILE_IGNORE_NEW_LINES | Entfernt das Zeilenumbruchzeichen am Ende jeder Zeile. |
FILE_SKIP_EMPTY_LINES | Überspringt leere Zeilen (am nützlichsten zusammen mit FILE_IGNORE_NEW_LINES). |
FILE_USE_INCLUDE_PATH | Sucht die Datei auch im include_path. |
<?php
// Lines without trailing "\n", and no blank lines.
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);Verwendung der Funktion file()
Ein in sich geschlossenes Beispiel, das eine Datei erstellt, sie mit file() einliest und über die Zeilen iteriert:
<?php
// Create a small file to read.
file_put_contents('myfile.txt', "First line\nSecond line\nThird line\n");
$lines = file('myfile.txt');
foreach ($lines as $lineNumber => $line) {
echo "Line #{$lineNumber}: " . trim($line) . "\n";
}Die Ausgabe lautet:
Line #0: First line
Line #1: Second line
Line #2: Third lineDie array-Schlüssel sind nullbasierte Zeilennummern, und die Werte sind die Zeileninhalte. Wir verwenden hier trim(), um den abschließenden Zeilenumbruch zu entfernen, den file() standardmäßig beibehält — das Übergeben von FILE_IGNORE_NEW_LINES würde dasselbe bereits beim Einlesen bewirken.
Zeilen in einer Datei zählen
Da file() ein array zurückgibt, liefert count() direkt die Zeilenanzahl:
<?php
file_put_contents('myfile.txt', "alpha\nbeta\ngamma\n");
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES);
echo "The file has " . count($lines) . " lines.\n"; // The file has 3 lines.Fehlerbehandlung
Wenn die Datei nicht gelesen werden kann, gibt file() false zurück und gibt eine Warnung aus. Prüfen Sie das Ergebnis immer, bevor Sie eine Schleife ausführen:
<?php
$lines = @file('does-not-exist.txt');
if ($lines === false) {
echo "Could not read the file.\n";
} else {
echo "Read " . count($lines) . " lines.\n";
}Der @-Operator unterdrückt die eingebaute Warnung, sodass Sie den Fehler selbst behandeln können.
Häufige Fehlerquellen
- Gesamte Datei im Speicher.
file()lädt alle Zeilen auf einmal in ein array. Bei sehr großen Dateien sollten Sie stattdessen ein Handle mitfopen()öffnen und zeilenweise mitfgets()lesen. - Abschließende Zeilenumbrüche werden beibehalten, sofern Sie nicht
FILE_IGNORE_NEW_LINESübergeben. Dies führt bei exakten string-Vergleichen zu Problemen, z. B. schlägt$lines[0] === 'value'fehl, wenn das Element tatsächlich"value\n"ist. - Existenz vorher prüfen, um Warnungen zu vermeiden: Kombinieren Sie den Aufruf mit
file_exists()oder unterdrücken Sie die Warnung mit@.
Fazit
Die Funktion file() ist der einfachste Weg, eine Datei in PHP als Zeilen-array einzulesen. Verwenden Sie die Flags FILE_IGNORE_NEW_LINES und FILE_SKIP_EMPTY_LINES für saubere Zeilen, prüfen Sie den Rückgabewert immer auf false, und bevorzugen Sie fgets() für Dateien, die zu groß sind, um sie im Speicher zu halten.