Falconbyte unterstüzen
Betrieb und Pflege von Falconbyte brauchen viel Zeit und Geld. Um dir auch weiterhin hochwertigen Content anbieten zu können, kannst du uns sehr gerne mit einem kleinen "Trinkgeld" unterstützen.
Thema in Kurzform
// in Datei schreiben
$handle = fopen("datei.txt","w");
fwrite($handle,"This is a test!");
fclose($handle);
// Inhalt auslesen
$handle = fopen("datei.txt","r");
while(! feof($handle)){
$zeile = fgets($handle);
echo $zeile . "<br>";
}
fclose($handle);
Vorbereitungen
PHP unterstützt von Haus aus alle nötigen Dateioperationen. Installationen sind daher nicht notwendig.
Wir sollten aber darauf achten, dass die Dateien und Verzeichnisse, mit denen wir arbeiten, die entsprechenden Lese- und Schreibrechte haben.
Sollten Sie beim Lesen oder Schreiben eine Fehlermeldung erhalten, dann passen Sie die chmod Rechte über den (S)FTP-Zugriff entsprechend an.
Oftmals wird dies aber nicht notwendig sein und Sie können gleich loslesen.
Datei öffnen mit fopen()
Um eine Datei mit PHP zu öffnen, verwenden wir die Funktion fopen(), wobei das f für file steht:
$handle = fopen("datei.txt", "w");
Als ersten Parameter geben wir den Namen der Datei an, die geöffnet werden soll. In unserem Beispiel ist es datei.txt. Der zweite Parameter legt die Zugriffstufe fest. Hier gibt es mehrere Möglichkeiten:
- "r" (read) - nur Lesezugriff
- "w" (write) - zum Überschreiben öffnen: Der Inhalt der Datei wird auf 0 Byte gesetzt (geleert). Die Datei kann neu beschrieben werden. Falls die Datei noch nicht existiert, wird sie erstellt.
- "a" (append) - zum Weiterschreiben öffnen: Der Inhalt der Datei wird beibehalten und es kann am Ende der Datei weitergeschrieben werden. Falls die Datei noch nicht exisitiert, wird sie erstellt.
- "c" - zum Überschreiben öffnen. Im Unterschied zu w wird der Inhalt der bestehenden Datei nicht sofort beim Öffnen gelöscht.
Der Rückgabewert der Funktion ist ein sogenanntes "Datei-Handle", das auf die Datei zeigt (oder false, falls das Öffnung nicht funktioniert hat). Wir speichern das Handle in der Variablen $handle. Das Datei-Handle dient zur Indentifizierung der eingelesenen Datei und wird für weitere Zugriffe darauf benötigt.
Datei schreiben mit fwrite()
Die Funktion fwrite() schreibt eine Zeichenkette in die mit dem Datei-Handle verknüpften Datei. Die Datei muss vor dem Schreiben also in einem Schreibmodus geöffnet sein.
$handle = fopen("datei.txt","w"); // zum Überschreiben öffnen
fwrite($handle,"This is a test!"); // in Datei schreiben
fclose($handle);
Der Funktion fwrite() hat zwei Parameter: Das Datei-Handle und die Zeichenkette, die in die Datei geschrieben werden soll.
fclose() schließt die Datei am Ende wieder. Es gehört zum guten Programmierstil, Dateien nach der Bearbeitung auch wieder zu schließen. Andernfalls läuft die geöffnete Datei auf dem Server weiter und verbraucht unnötig Ressourcen.
fwrite() mehrmals verwenden
Wir können nach dem Öffnen der Datei fwrite() auch mehrmals hintereinander ausführen. Die Datei wird dann sequentiell weitergeschrieben:
$handle = fopen("datei.txt","w");
fwrite($handle,"This is a test!"); // in Datei schreiben
fwrite($handle," - This is the second test"); // und nochmal schreiben
fclose($handle);
Die Datei hat nun folgenden Inhalt:
This is a test! - This is the second test
Zeilenumbruch
txt-Dateien werden zumeist gebraucht, um mit zeilenseparierten Datensätzen zu arbeiten. Für einen Zeilenumbruch wird die Zeichenfolge \n verwendet:
$handle = fopen("datei.txt","w");
$text = "Erste Zeile \n";
$text .= "Zweite Zeile \n";
$text .= "Dritte Zeile";
fwrite($handle, $text); // in Datei schreiben
fclose($handle);
Der Inhalt der txt-Datei sieht mit den beiden Zeilenumbrüchen nun so aus:
Erste Zeile
Zweite Zeile
Dritte Zeile
txt-Datei auslesen mit fgets()
Ein sehr gebräuchlicher Weg, den Inhalt einer txt-Datei auszulesen, ist der Einsatz der Funktion fgets() in Kombination mit einer while-Schleife und der Funktion feof(). eof steht dabei für end of file.
Hier zunächst das Programm:
$handle = fopen("datei.txt","r"); // Datei zum Lesen ("r") öffnen
// Solange auslesen bis EOF erreicht ist.
while(! feof($handle)){
$zeile = fgets($handle);
echo $zeile . "<br>";
}
fclose($handle); // Datei schließen
Die Funktion feof() prüft, ob das Ende einer Datei erreicht ist. Falls das so ist, wird true zurückgeliefert (ansonsten false). Wir binden die Funktion deshalb in die while-Schleife ein, die solange läuft, bis das Ende der Datei erreicht ist.
Innerhalb der Schleife arbeiten wir nun mit der Funktion fgets() und übergeben das Datei-Handle als Parameter. fgets() liest immer genau eine Zeile aus der Datei und gibt den Wert als String zurück. Danach springt der Dateizeiger zur nächsten Zeile.
Diese Vorgehensweise ist ganz praktisch, wenn wir eine Datei unbekannter Länge zeilenweise auslesen wollen. Allerdings kann sie auch etwas umständlich sein.
Einfaches auslesen
Es gibt zwei Funktionen, mit denen wir noch einfacher an Dateiinformationen kommen. Auch diese haben ihre Vor- und Nachteile.
readfile()
Der schnellste Weg, den Inhalt einer txt-Datei auszulesen, ist durch Einsatz der Funktion readfile(). Für readfile() muss die Datei nicht geöffnet werden und es gibt auch keinen Datei-Handle. Es genügt, die Funktion mit dem Namen der Datei als Parameter aufzurufen.
readfile() gibt den gesamten Inhalt einer Datei als eine einzelne Zeichenkette zurück. Zeilenumbrüche werden zu Leerzeichen umgewandelt:
echo readfile("datei.txt");
Als Ausgabe erhalten wir durch echo Folgendes am Bildschirm angezeigt:
Erste Zeile Zweite Zeile Dritte ZeileZum schnellen Testen geht die Funktion in Ordnung. Da sie aber keine Zeilen ausliest, ist Sie für mehr kaum zu gebrauchen.
file()
Auch die Funktion file() ist für das schnelle Auslesen von Dateiinformationen gedacht. Im Gegensatz zu readfile() liefert die Funktion die Zeilen der Datei praktischerweise in einem Array zurück:
// Zeilen der Datei in Array speichern
$array = file("datei.txt");
// Ausgabe am Bildschirm
for($i = 0; $i < count($array); $i++){
echo $array[$i] . "
";
}
So erhalten wir:
Erste Zeile
Zweite Zeile
Dritte Zeile
Die Funktion file() eignet sich bestens, um zeilenseparierten Inhalt aus einer Datei auszulesen:
- Schneller und unkomplizierter Einsatz mit nur einer Anweisung.
- Weiterarbeit der aus der Datei gewonnen Datenzeilen durch die Rückgabe in einem Array.
Übungen
einfach
Schreiben Sie folgende Zeile in eine Datei namens meineDatei.txt:
Ich will deine Kleider, deine Stiefel und dein Motorad.
mittel
Downloaden Sie die txt-Datei namensliste.txt (rechte Maustage > Ziel speichern unter...)..
Lesen Sie den Inhalt der Datei in ein PHP-Programm ein. Geben Sie nun alle Datensätze zu denjenigen Personen am Bildschirm aus, die mindestens 30 JAhre als sind.
schwer
Versuchen wir es nun einmal mit einem ganz praktischen Programm für Websites: Einen Besucherzähler 😀
Immer dann, wenn die PHP-Seite meineSeite.php aufgerufen wird, soll der Zähler um +1 inkrementiert werden. Der aktuelle Zählerwert soll in der Datei counter.txt gespeichert werden und beim Aufruf von meineSeite.php angezeigt werden:
Wir arbeiten hier ohne Cookies oder Sessions, sodass jeder Klick den Zähler um +1 erhöht (es handelt sich also streng genommen um einen "Klickzähler").
Also, los geht's!