Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

PHP file(): Datei zeilenweise in ein Array einlesen

Sie befinden sich: Home > Php Tutorial > PHP file(): Datei...

PHP file(): Datei zeilenweise in ein Array einlesen


Eintrag am:  02.04.2026
Hits / Besucher:  17
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Das Lesen von Dateien gehört zu den häufigsten Aufgaben in der PHP-Entwicklung. Ob Konfigurationsdateien, CSV-Exporte oder Logdateien: In vielen Fällen ist es praktisch, den Inhalt einer Datei direkt als Array zu erhalten, wobei jede Zeile einem eigenen Element entspricht. Genau diese Aufgabe übernimmt die PHP-Funktion file(). Sie liest eine komplette Datei ein und gibt deren Inhalt als indiziertes Array zurück. Jeder Eintrag im Array repräsentiert dabei eine einzelne Zeile der Datei. Dieses Tutorial erklärt die Funktionsweise von file() im Detail, zeigt die verfügbaren Parameter und Flags und vergleicht die Funktion mit verwandten Ansätzen wie file_get_contents() und der Kombination aus fopen(), fgets() und fclose().

Illustration zum Tutorial: PHP file(): Datei zeilenweise in ein Array einlesen

Schauen wir uns zuerst an, wie die Funktion arbeitet und welche Steuerungsmöglichkeiten die optionalen Parameter bieten.

Was macht die file()-Funktion?

Die Funktion file() liest eine Datei vollständig ein und liefert deren Inhalt als Array zurück. Jede Zeile der Datei wird dabei zu einem eigenen Element des Arrays. Die grundlegende Syntax lautet:

<?php

$zeilen = file("beispiel.txt");

/* Jede Zeile einzeln ausgeben */
foreach ($zeilen as $nummer => $zeile) {
echo "Zeile " . $nummer . ": " . $zeile;
}

Wenn die Datei beispiel.txt drei Zeilen enthält, gibt file() ein Array mit drei Elementen zurück. Der Index beginnt bei 0. Standardmäßig enthält jedes Element am Ende noch den Zeilenumbruch der jeweiligen Zeile. Dieses Verhalten lässt sich über optionale Flags steuern. Bei einem Fehler, etwa wenn die Datei nicht existiert, gibt die Funktion false zurück.

Die Parameter von file()

Die Funktion file() akzeptiert insgesamt drei Parameter. Nur der erste ist zwingend erforderlich, die beiden anderen sind optional und bieten zusätzliche Steuerungsmöglichkeiten.

Dateiname

Der erste Parameter ist der Pfad zur Datei, die eingelesen werden soll. Dieser kann ein relativer oder absoluter Pfad im Dateisystem sein. PHP unterstützt hier auch URLs, sofern die Konfigurationsoption allow_url_fopen aktiviert ist. Der Dateiname wird als String übergeben.

<?php

/* Relativer Pfad */
$zeilen = file("daten/liste.txt");

/* Absoluter Pfad */
$zeilen = file("/var/www/html/daten/liste.txt");

/* URL als Dateiname */
$zeilen = file("https://example.com/daten.txt");

Flags (FILE_IGNORE_NEW_LINES, FILE_SKIP_EMPTY_LINES, FILE_USE_INCLUDE_PATH)

Der zweite Parameter akzeptiert optionale Flags, die das Verhalten der Funktion beeinflussen. Es stehen drei Konstanten zur Verfügung, die sich mit dem Pipe-Operator | kombinieren lassen.

Die Konstante FILE_IGNORE_NEW_LINES entfernt die Zeilenumbrüche am Ende jeder Zeile. Ohne dieses Flag enthält jedes Array-Element am Ende ein \n (unter Linux) oder \r\n (unter Windows). In den meisten Anwendungsfällen ist es sinnvoll, dieses Flag zu setzen, da die Zeilenumbrüche bei der Weiterverarbeitung stören können.

Die Konstante FILE_SKIP_EMPTY_LINES sorgt dafür, dass leere Zeilen übersprungen werden. Zeilen, die nur aus einem Zeilenumbruch bestehen, werden nicht in das Array aufgenommen. Das ist besonders nützlich, wenn Dateien mit inkonsistenter Formatierung verarbeitet werden.

Die Konstante FILE_USE_INCLUDE_PATH weist PHP an, die Datei im Include-Pfad zu suchen. Dieser Pfad wird in der PHP-Konfiguration über die Direktive include_path festgelegt.

<?php

/* Zeilenumbrueche entfernen */
$zeilen = file("config.txt", FILE_IGNORE_NEW_LINES);

/* Leere Zeilen ueberspringen */
$zeilen = file("config.txt", FILE_SKIP_EMPTY_LINES);

/* Beide Flags kombinieren */
$zeilen = file("config.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

/* Alle drei Flags kombinieren */
$zeilen = file(
"config.txt",
FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES | FILE_USE_INCLUDE_PATH
);

Stream-Kontext

Der dritte Parameter ist ein Stream-Kontext, der mit stream_context_create() erstellt wird. Er erlaubt es, zusätzliche Optionen für den Dateizugriff zu definieren, etwa HTTP-Header bei URLs oder spezielle Socket-Einstellungen. In den meisten Fällen wird dieser Parameter nicht benötigt und kann weggelassen werden.

Datei zeilenweise einlesen und verarbeiten

Ein typischer Anwendungsfall ist das Einlesen einer Datei und die anschließende Verarbeitung jeder einzelnen Zeile. Das folgende Beispiel liest eine Textdatei ein, die eine Einkaufsliste enthält, und gibt jede Zeile nummeriert aus.

<?php

$datei = "einkaufsliste.txt";
$zeilen = file($datei, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

if ($zeilen === false) {
echo "Fehler: Die Datei konnte nicht gelesen werden.";
} else {
echo "Einkaufsliste (" . count($zeilen) . " Eintraege):" . PHP_EOL;

foreach ($zeilen as $index => $artikel) {
$nummer = $index + 1;
$artikel = trim($artikel);
echo $nummer . ". " . $artikel . PHP_EOL;
}
}

Durch die Kombination der Flags FILE_IGNORE_NEW_LINES und FILE_SKIP_EMPTY_LINES erhält das Array nur die tatsächlichen Einträge ohne Zeilenumbrüche und ohne leere Zeilen. Die Funktion trim() entfernt zusätzlich eventuelle Leerzeichen am Anfang und Ende jeder Zeile.

Das folgende Diagramm veranschaulicht, wie file() eine Textdatei in ein Array umwandelt.

flowchart LR
    A["Textdatei\n(beispiel.txt)"] -->|"file()"| B["PHP Array"]
    B --> C["Index 0: Erste Zeile"]
    B --> D["Index 1: Zweite Zeile"]
    B --> E["Index 2: Dritte Zeile"]
    B --> F["Index n: Letzte Zeile"]

Dateien von URLs lesen

Die Funktion file() kann nicht nur lokale Dateien, sondern auch Inhalte von URLs einlesen. Voraussetzung dafür ist, dass die PHP-Konfigurationsoption allow_url_fopen auf On gesetzt ist. Diese Einstellung ist in den meisten PHP-Installationen standardmäßig aktiviert.

<?php

$url = "https://example.com/daten.csv";

/* Stream-Kontext mit Timeout erstellen */
$optionen = array(
"http" => array(
"timeout" => 10,
"method" => "GET",
"header" => "Accept: text/plain\r\n"
)
);
$kontext = stream_context_create($optionen);

$zeilen = file($url, FILE_IGNORE_NEW_LINES, $kontext);

if ($zeilen !== false) {
echo "Empfangene Zeilen: " . count($zeilen) . PHP_EOL;
foreach ($zeilen as $zeile) {
echo $zeile . PHP_EOL;
}
} else {
echo "Die URL konnte nicht gelesen werden.";
}

Beim Lesen von URLs ist der dritte Parameter besonders nützlich. Über den Stream-Kontext lassen sich HTTP-Header, Timeouts und die Anfragemethode definieren. Dadurch wird der Zugriff auf externe Ressourcen flexibel konfigurierbar.

Fehlerbehandlung beim Dateilesen

Eine robuste Fehlerbehandlung ist beim Arbeiten mit dem Dateisystem unentbehrlich. Es gibt verschiedene Gründe, warum das Einlesen einer Datei fehlschlagen kann. Die beiden häufigsten Ursachen sind eine nicht vorhandene Datei und fehlende Berechtigungen.

Datei existiert nicht

Bevor file() aufgerufen wird, sollte mit file_exists() geprüft werden, ob die Datei überhaupt vorhanden ist. Alternativ lässt sich der Rückgabewert von file() direkt auf false prüfen. Zusätzlich kann der Fehlerunterdrückungsoperator @ eingesetzt werden, um Warnmeldungen zu unterdrücken.

<?php

$datei = "konfiguration.txt";

if (!file_exists($datei)) {
echo "Fehler: Die Datei '" . $datei . "' wurde nicht gefunden.";
} else {
$zeilen = @file($datei, FILE_IGNORE_NEW_LINES);

if ($zeilen === false) {
echo "Fehler: Die Datei konnte nicht gelesen werden.";
} else {
echo "Datei erfolgreich eingelesen: " . count($zeilen) . " Zeilen.";
}
}

Berechtigungsprobleme

Auf Linux-Systemen muss der Webserver-Benutzer (häufig www-data) Leserechte für die Datei besitzen. Mit der Funktion is_readable() lässt sich vorab prüfen, ob die Datei tatsächlich gelesen werden darf. Diese Prüfung ist besonders wichtig in Produktivumgebungen, in denen Dateiberechtigungen restriktiv konfiguriert sind.

<?php

$datei = "/var/log/anwendung.log";

if (!file_exists($datei)) {
echo "Die Datei existiert nicht.";
} elseif (!is_readable($datei)) {
echo "Keine Leseberechtigung fuer die Datei.";
} else {
$zeilen = file($datei, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

if ($zeilen !== false) {
echo "Logdatei: " . count($zeilen) . " Eintraege gefunden." . PHP_EOL;
/* Die letzten 5 Eintraege ausgeben */
$letzte = array_slice($zeilen, -5);
foreach ($letzte as $eintrag) {
echo $eintrag . PHP_EOL;
}
}
}

file() vs. file_get_contents()

Beide Funktionen lesen eine Datei vollständig ein, unterscheiden sich aber im Rückgabetyp. Die Funktion file() liefert ein Array, in dem jede Zeile ein eigenes Element darstellt. Die Funktion file_get_contents() hingegen gibt den gesamten Dateiinhalt als einen einzigen String zurück.

Wenn die zeilenweise Verarbeitung im Vordergrund steht, ist file() die bessere Wahl, da das Array direkt mit foreach durchlaufen werden kann. Wenn dagegen der gesamte Inhalt als zusammenhängender Text benötigt wird, etwa zum Parsen von JSON oder XML, bietet sich file_get_contents() an.

Ein weiterer Unterschied betrifft den Speicherverbrauch. Beide Funktionen laden die gesamte Datei in den Arbeitsspeicher. Bei file() kommt jedoch der zusätzliche Overhead des Arrays hinzu, da PHP für jedes Element Verwaltungsdaten anlegt. Für sehr große Dateien mit vielen Zeilen kann file_get_contents() in Kombination mit explode() etwas effizienter sein. In der Praxis ist der Unterschied bei normalen Dateigrößen jedoch vernachlässigbar.

file() vs. fopen/fgets/fclose

Die Kombination aus fopen(), fgets() und fclose() bietet eine alternative Methode zum zeilenweisen Einlesen einer Datei. Der entscheidende Vorteil dieser Methode liegt im Speicherverbrauch. Während file() die gesamte Datei auf einmal in den Arbeitsspeicher lädt, liest fgets() jeweils nur eine einzelne Zeile. Bei sehr großen Dateien, etwa mehrstufigen Logdateien mit mehreren Gigabyte, kann dieser Unterschied erheblich sein.

Die Funktion file() ist die kompaktere Lösung, da sie in einem einzigen Aufruf das gewünschte Ergebnis liefert. Die Variante mit fopen() erfordert dagegen mehr Code: Die Datei muss geöffnet, in einer Schleife zeilenweise gelesen und anschließend wieder geschlossen werden. Dafür bietet sie aber die Möglichkeit, die Verarbeitung jederzeit abzubrechen oder Zeilen selektiv zu überspringen, ohne die gesamte Datei einlesen zu müssen.

Für kleine bis mittelgroße Dateien (bis einige Megabyte) ist file() in der Regel die beste Wahl. Bei Dateien, die den verfügbaren Arbeitsspeicher übersteigen könnten, sollte stattdessen fopen() mit fgets() verwendet werden.

Überblick: PHP File Handling Funktionen

PHP stellt eine Vielzahl von Funktionen für den Umgang mit dem Dateisystem bereit. Die folgende Tabelle gibt einen Überblick über die wichtigsten Funktionen im Zusammenhang mit dem Lesen von Dateien.

Funktion Rückgabe Beschreibung
file() Array Liest eine Datei zeilenweise in ein Array ein
file_get_contents() String Liest den gesamten Inhalt einer Datei als String
file_put_contents() int oder false Schreibt einen String in eine Datei
fopen() Resource Öffnet eine Datei oder URL als Stream
fgets() String Liest eine einzelne Zeile aus einem geöffneten Stream
fclose() bool Schließt einen geöffneten Datei-Stream
file_exists() bool Prüft, ob eine Datei oder ein Verzeichnis existiert
is_readable() bool Prüft, ob eine Datei lesbar ist
readfile() int oder false Liest eine Datei und gibt sie direkt aus

Fazit

Die PHP-Funktion file() ist ein leistungsfähiges Werkzeug zum zeilenweisen Einlesen von Dateien. Sie liefert den Dateiinhalt als Array, das sich direkt mit foreach oder anderen Array-Funktionen weiterverarbeiten lässt. Durch die Flags FILE_IGNORE_NEW_LINES und FILE_SKIP_EMPTY_LINES kann das Ergebnis bereits beim Einlesen bereinigt werden. Für kleine bis mittelgroße Dateien ist file() die kompakteste und bequemste Lösung. Bei sehr großen Dateien empfiehlt sich dagegen die Kombination aus fopen() und fgets(), um den Speicherverbrauch gering zu halten. Eine sorgfältige Fehlerbehandlung mit file_exists() und is_readable() stellt sicher, dass das Programm auch bei fehlenden oder geschützten Dateien zuverlässig reagiert.

 


Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.