Gerade bei Textdateien oder Konfigurationsdateien kommt es des Öfteren vor, dass Sie die zugrunde liegende Datei zeilenweise einlesen oder zeilenweise verarbeiten möchte. Ein Beispiel hierfür wäre das Lesen von Einstellungen aus einer Konfigurationsdatei. Eine einfache Möglichkeit hierzu bietet die Funktion fgets(), welche aus einer geöffneten Datei von der aktuellen Position des Dateizeigers eine Zeile ausliest.
Die maximale Länge einer Zeile kann optional (erst seit PHP 4.2.0) als zweiter Parameter nach dem „handle“ angegeben werden. Wenn die Länge nicht angegeben wird, wird von PHP die Länge automatisch auf 1024 Bytes begrenzt. Sollte PHP beim Erkennen der Zeilenenden auf einem Mac ein Problem haben, können Sie mit der Option „auto_detect_line_endings“ in den meisten Fällen diese Probleme beseitigen. Wenn ein Fehler beim Lesen einer Zeile aus der Datei auftritt, gibt die Funktion „false“ zurück.
Beispiel:
<?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);
}
?>
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:
Zunächst wird die Anzeige von evtl. auftretenden Fehlern erlaubt. In der Variable $datei wird ein gültiger Dateiname festgelegt. Die Angabe kann natürlich einen Pfad beinhalten oder eine Adresse. In der Variable $zeilen wird Platz für die Zeilen reserviert, die über fgets eingelesen werden. Die Datei wird über fopen für den lesenden („r“) Zugriff geöffnet.
Dabei wird der Dateizeiger auf den Beginn der Datei gerichtet. Nachdem überprüft wurde, ob es sich um einen gültigen Zeiger handelt, wir im Fehlerfall eine Fehlermeldung ausgegeben. Wenn ein gültiger Dateizeiger vorliegt, kann mit dem Einlesen begonnen werden, bis die Datei zu Ende ist (EOF). In der Schleife wird jede einzelne gelesene Zeile an den String $zeilen angehängt. Am Ende werden dann noch alle gesammelten Zeilen ausgegeben und die Datei wieder geschlossen.
Im Gegensatz zu fgets können Sie mit fgetss() Zeilen aus Dateien einlesen und zusätzlich noch automatisch HTML-Tags entfernen lassen.