Lektion 15: Aus einer Text-Datei lesen
In der vorigen Lektion haben wir gelernt, wie man mit PHP auf das Dateisystem des Servers zugreifen kann. In dieser Lektion werden wir dieses Wissen anwenden und aus einer normalen Textdatei lesen.
Textdateien können extrem nützlich für das Speichern verschiedner Arten von Informationen sein. Sie sind nicht ganz so flexibel wie wirkliche Datenbanken, aber Textdateien brauchen meist nicht so viel Speicher. Außerdem sind Textdateien ein schlichtes einfaches Format, das auf fast allen Systemen funktioniert.
Öffnen der Textdatei
Wir benutzen die fopen-Function, um die Textdatei zu öffnen. Die Syntax ist die folgende:
fopen(Dateiname, Modus)
- Dateiname
- Name der Datei, die geöffnet werden soll.
- Modus
- Der Modus kann auf die folgenden Werte gesetzt werden: "r" (reading = lesen), "w" (writing = schreiben) oder "a" (appending = anfügen). In dieser Lektion werden wir uns nur mit dem Lesen beschäftigen. Aus diesem Grund benutzen wir "r". In der kommenden Lektion werden Sie dann lernen, wie man in eine Datei schreibt bzw. etwas anfügt.
Die Beispiele in dieser Lektion nutzen die Textdatei unitednations.txt. Dies ist eine einfache Liste der Programme und Fonds der Vereinten Nationen und die Domainnamen der jeweiligen Webseite. Sie können sich diese Datei herunterladen oder Sie erstellen eine eigene Datei und testen die Beispiele daran.
Lassen Sie uns zuerst die Datei unitednations.txt öffnen:
<?php // Öffnet die Textdatei $f = fopen("unitednations.txt", "r"); // Schließt die Textdatei fclose($f); ?>
Beispiel 1: Eine Zeile aus einer Textdatei lesen
Mit der Function fgets können wir eine Zeile aus einer Textdatei auslesen. Diese Methode liest bis zum ersten Zeilenumbruch (aber schließt diesen nicht ein).
<html> <head> <title>Aus einer Textdatei lesen</title> </head> <body> <?php $f = fopen("unitednations.txt", "r"); // Liest eine Zeile aus der Textdatei und gibt deren Inhalt aus echo fgets($f); fclose($f); ?> </body> </html>
Beispiel 2: Alle Zeilen aus einer Textdatei auslesen
<html> <head> <title>Aus einer Textdatei lesen</title> </head> <body> <?php $f = fopen("unitednations.txt", "r"); // Liest Zeile für Zeile bis zum Ende der Datei while(!feof($f)) { echo fgets($f) . "<br />"; } fclose($f); ?> </body> </html>
In diesem Beispiel gehen wir mittels einer Schleife durch alle Zeilen und benutzen dabei die Function feof (for end-of-file), um zu überprüfen, ob das Dateiende erreicht ist. Wenn dies nicht der Fall ist ("!" - siehe Lektion 6), wird die Zeile geschrieben.
Anstatt mit einer Schleife durch alle Zeilen zu gehen, hätten wir das gleiche Resultat mit der Function fread erreichen können. Wenn Sie mit sehr großen Textdateien (Tausende von Zeilen) arbeiten, seien Sie sich bitte bewusst, dass die fread-Function mehr Ressourcen benutzt als die fgets-Function. Für kleinere Dateien macht es fast keinen Unterschied.
Beispiel 3: Ein einfaches Linkverzeichnis
Wie bereits zu Beginn der Lektion erwähnt, können Textdateien sehr gut für Datenspeicherung genutzt werden. Dies zeigen wir im nachfolgenden Beispiel, in dem wir ein einfaches Linkverzeichnis aus dem Inhalt unserer Textdatei unitednations.txt erstellen.
Die Datei ist systematisch aufgeschrieben. Erst der Name des UN-Programmes, dann ein Komma und dann der Domainname. Wie Sie sich vielleicht vorstellen können, können noch weitere Informationen in dieser mit Kommas getrennten Liste in der Datei gespeichert werden.
Um die Informationen aus jeder Zeile zu bekommen können wir die Funktionalitäten der Arrays nutzen. Siehe Lektion 8 für weitere Informationen über Arrays.
<html> <head> <title>Aus einer Textdatei lesen</title> </head> <body> <?php $f = fopen("unitednations.txt", "r"); // Liest Zeile für Zeile bis zum Ende der Datei while (!feof($f)) { // Erstellt einen Array, benutzt das Komma als Trennzeichen $arrM = explode(",",fgets($f)); // Schreibt Links (benutze die Daten aus dem Array) echo "<li><a href='http://" . $arrM[1] . "'>" . $arrM[0]. "</a></li>"; } fclose($f); ?> </body> </html>
Ziemlich praktisch, stimmt's? Im Prinzip könnten Sie die Datei mit Hunderten von Links erweitern oder zu Ihrem Verzeichnis noch Adressinformationen hinzufügen.
In der folgenden Lektion schauen wir uns an, wie man in eine Textdatei schreibt.