Jetzt anmelden...

Login
Passwort
Registrieren
03.09.20 3156 Views Kommentare [0] 3 0

credit: ©I Viewfinder

PHP Tutorial #29

txt Dateien mit PHP schreiben und auslesen

Um einfache Daten zu schreiben und auszulesen muss nicht immer gleich auf eine Datenbank zurückgegriffen werden. Für kleine Anwendungen ist die Verwendung von txt-Dateien oftmals die bessere Wahl. Wir zeigen Ihnen hier, wie das geht und wollen am Ende einen kleinen Besucherzähler schreiben.

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);

    Inhaltsverzeichnis

  1. Vorbereitungen
  2. Datei öffnen mit fopen()
  3. Datei schreiben mit fwrite()
  4. Datei auslesen mit fgets()
  5. Einfaches auslesen
  6. Übungen

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 Zeile

Zum 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.

Lösung ein-/ausblenden

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.

Lösung ein-/ausblenden

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!

Lösung ein-/ausblenden

Falconbyte unterstützen

Kommentar schreiben

Alle Kommentare

Es gibt bislang noch keine Kommentare zu diesem Thema.

Der Konstruktor

Was ist eigentlich ein Konstruktor?

Objekte vergleichen

Was ist der Unterschied zwischen == und equals()?

Objektsammlungen

Lernen Sie in diesem Kapitel, wie Sie eine Sammlung von Objekten erstellen können.

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2021 Stefan E. Heller

Impressum | Datenschutz

Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen