Gerade bei der Arbeit mit Text- oder Konfigurationsdateien stoßen Sie häufig darauf, dass es sinnvoll ist, die Datei zeilenweise einzulesen oder zu verarbeiten. Dies ist besonders nützlich, wenn Sie bestimmte Einstellungen aus einer Konfigurationsdatei gezielt extrahieren möchten. Eine elegante Möglichkeit dazu bietet die Funktion fgets(), die Ihnen erlaubt, aus einer geöffneten Datei Zeile für Zeile auszulesen, wobei sie immer von der aktuellen Position des Dateizeigers ansetzt. So behalten Sie die Kontrolle über den Leseprozess und können den Inhalt der Datei strukturiert verarbeiten.
Ein spannender Aspekt: Seit PHP-Version 4.2.0 können Sie die maximale Länge der zu lesenden Zeile optional als zweiten Parameter angeben. Wird dieser Wert nicht gesetzt, wählt PHP automatisch eine maximale Zeilenlänge von 1024 Bytes. Dies reicht in den meisten Fällen aus, kann aber bei sehr langen Textzeilen angepasst werden. Falls PHP auf einem Mac Schwierigkeiten hat, Zeilenenden korrekt zu erkennen, hilft in der Regel die Option „auto_detect_line_endings“, die solche Probleme häufig behebt. Ein kleiner Tipp für die Fehlerbehandlung: Sollte beim Lesen einer Zeile ein Fehler auftreten, gibt fgets() „false“ zurück, sodass Sie leicht prüfen können, ob alles wie gewünscht funktioniert hat.
Ein Anwendungsbeispiel:
<?php
error_reporting(E_ALL);
$datei = './datei.txt';
$zeilen = '';
$handle = @fopen ($datei, "r");
if ($handle === false) {
echo 'Die Datei "'.$datei.'" konnte nicht
gelesen werden.';
} else {
while (!feof($handle)) {
$zeilen .= fgets($handle, 4096);
}
echo $zeilen;
fclose ($handle);
}
?>
Beispielhafte Ausgabe:
Hier steht der Text aus Zeile 1 der Datei „datei.txt“.
Hier steht der Text aus Zeile 2 der Datei „datei.txt“.
Erklärung des Ablaufs:
Zu Beginn aktivieren Sie die Anzeige aller Fehlermeldungen. Dies ist besonders in der Entwicklungsphase von Vorteil, da Ihnen dadurch mögliche Probleme schneller auffallen. In der Variable $datei geben Sie den Dateipfad an, den Sie einlesen möchten. Dabei haben Sie die Flexibilität, sowohl relative als auch absolute Pfade zu nutzen, je nach Struktur Ihres Projekts. Die Variable $zeilen wird als leerer String initialisiert und dient später dazu, die eingelesenen Zeilen zu speichern.
Mit fopen() öffnen Sie die Datei im Lesemodus („r“), wodurch der Dateizeiger an den Anfang der Datei gesetzt wird. Anschließend prüfen Sie, ob die Datei erfolgreich geöffnet wurde. Wenn dies fehlschlägt, wird eine Fehlermeldung ausgegeben. Andernfalls beginnt der eigentliche Lesevorgang: Eine while-Schleife liest die Datei Zeile für Zeile, bis das Dateiende (EOF) erreicht ist. Jede eingelesene Zeile wird an den String $zeilen angehängt, sodass am Ende der gesamte Inhalt vorliegt. Abschließend wird die Datei wieder geschlossen, um Systemressourcen freizugeben.
Ein zusätzlicher Hinweis: fgets() ist hervorragend geeignet für einfache Zeilenoperationen. Wenn Sie jedoch eine Funktion benötigen, die HTML-Tags automatisch entfernt, kann fgetss() die bessere Wahl sein. Sie kombiniert das zeilenweise Lesen mit einer Filterung der Tags, was gerade bei unstrukturierten HTML-Inhalten nützlich ist.