Tage
Stunden
Minuten
Sekunden
- % Rabatt - nur bis ⏰

Dateien mit Inhalt füllen – PHP Tutorial

In diesem Tutorial zeige ich dir, wie Du Dateien mit PHP öffnest, gespeicherte Inhalte aus Dateien liest, neue Inhalte in einer Datei speicherst und Dateien am Ende wieder schliesst. Dazu kommen noch Hilfsfunktionen, die Dir dabei helfen, kritische Situationen bequem abzufangen.

Du kannst dir Dateien wie Kartons mit einem aufgeklebten Zettel vorstellen. Der Zettel beschreibt den Inhalt des Kartons -- bei Dateien auf deinem Computer ist das der Dateiname. In der Datei sind Daten gespeichert, die entnommen, in den Hauptspeicher geladen und durch ein Programm verarbeitet werden können.

Der Ablauf für den Zugriff auf eine Datei umfasst immer die folgenden drei Einzelschritte:

  1. Öffnen der Datei mit dem Ergebnis eines Dateihandles
  2. Lesen aus der Datei oder Schreiben in die Datei mit dem Dateihandle als Referenz
  3. Schließen der Datei mit dem Dateihandle als Referenz

Nachfolgend erklären wir Dir alle Schritte Stück für Stück.

(Falls du mehr anfängerfreundliche PHP Tutorials zum Lernen suchst, klicke hier)

Dateien öffnen mit PHP

PHP kennt dazu die Funktion fopen() als Abkürzung für "file open". Die Funktion hat zwei Parameter -- den Namen der zu öffnenden Datei und den Modus, der beschreibt, wie PHP mit der Datei umgeht.

Welche einzelnen Modi es gibt, zeigt diese Tabelle:

[one_fourth_3_first]r[/one_fourth_3_first][three_fourth_last]Öffne eine Datei zum Lesen (r wie "read"). Der Lesezeiger ("file pointer") zeigt auf den Anfang der Datei.[/three_fourth_last]

[one_fourth_3_first]w[/one_fourth_3_first][three_fourth_last]Öffne eine Datei zum Schreiben (w wie "write"). Der bestehende Inhalt der Datei wird gelöscht oder eine neue Datei wird angelegt, falls diese noch nicht existiert. Der Lesezeiger ("file pointer") zeigt auf den Anfang der Datei.[/three_fourth_last]

[one_fourth_3_first]a[/one_fourth_3_first][three_fourth_last]Öffne eine Datei zum Schreiben (a wie "append"). Der bestehende Inhalt der Datei bleibt erhalten. Eine neue Datei wird angelegt, falls diese noch nicht existiert. Der Lesezeiger ("filepointer") zeigt auf das Ende der Datei.[/three_fourth_last]

[one_fourth_3_first]x[/one_fourth_3_first][three_fourth_last] Lege eine neue Datei zum Schreiben an (x für "erase"). Falls die Datei bereits besteht, liefert die Funktion eine Fehler in Form
von FALSE zurück.[/three_fourth_last]

Weitere Modi (du musst diese nicht alle auswendig können)

[one_fourth_3_first]r+[/one_fourth_3_first][three_fourth_last]Öffne eine Datei zum Lesen und Schreiben. Der Lesezeiger ("filepointer") zeigt auf den Anfang der Datei.[/three_fourth_last]

[one_fourth_3_first]w+[/one_fourth_3_first][three_fourth_last]Öffne eine Datei zum Lesen und Schreiben. Der bestehende Inhalt der Datei wird gelöscht oder eine neue Datei wird angelegt, falls diese noch nicht existiert. Der Lesezeiger ("file pointer") zeigt auf den Anfang der Datei.[/three_fourth_last]

[one_fourth_3_first]a+[/one_fourth_3_first][three_fourth_last]Öffne eine Datei zum Lesen und Schreiben (a wie "append"). Der bestehende Inhalt der Datei bleibt erhalten. Eine neue Datei
wird angelegt, falls diese noch nicht existiert. Der Lesezeiger ("file pointer") zeigt auf das Ende der Datei.[/three_fourth_last]

[one_fourth_3_first]x+[/one_fourth_3_first][three_fourth_last]Lege eine neue Datei zum Lesen und Schreiben an (x für "erase"). Falls die Datei bereits besteht, liefert die Funktion einen Fehler
in Form von FALSE zurück.[/three_fourth_last]

Kostenloser Crashkurs für Anfänger

Jetzt kostenlosen Crashkurs sichern (Online Programmieren, keine Installation nötig)

Ok kommen wir zurück zur fopen()-Funktion:

Der Rückgabewert von fopen() ist ein sogenanntes Dateihandle. Das ist eine ID oder Kennung zur geöffneten Datei. Diese Kennung gibt das Betriebssystem zurück und merkt sich darüber die geöffnete Datei. Darüber referenzierst Du in der nachfolgenden Programmierung die geöffnete Datei eindeutig.

Der Programmausschnitt unter dem Absatz öffnet die Datei "datenbank.txt" zum Lesen -- daher die Angabe "r" für den Lesemodus. Das Dateihandle landet in der Variable $myfile. Falls das Öffnen der Datei nicht gelingt, wird die Funktion die() aufgerufen, die die Ausführung des PHP-Skripts mit der Fehlermeldung als Parameter vollständig beendet.

<?php
  $myfile = fopen("datenbank.txt", "r") or die("Kann Datei nicht öffnen!");
?>

Aus Dateien lesen

Ist die Datei erfolgreich geöffnet, kannst Du daraus lesen. Jetzt kommt die Funktion fread() zum Einsatz. "fread" ist die Abkürzung für "file read". Die Funktion benötigt zwei Parameter -- das Dateihandle und die Anzahl Bytes, die aus der Datei zu lesen sind. Ergebnis ist eine Zeichenkette mit der angegebenen Länge und dem entsprechend gelesenen Dateiinhalt.

Das nachfolgende Beispiel liest 30 Zeichen aus der zuvor geöffneten Datei in die Variable $daten (Zeile 3):

<?php
  $myfile = fopen("datenbank.txt", "r");
  $daten = fread($myfile,30);
?>

Der interne Dateizeiger rutscht nun 30 Zeichen weiter. Da das Lesen in so kleinen Schritten für größere Datenmengen etwas mühsam ist, gibt es eine Reihe von Vereinfachungen. Mit Hilfe der Funktion fgets() liest Du gleich eine ganze Zeile ein:

<?php
  $myfile = fopen("datenbank.txt", "r");
  $daten = fgets($myfile);
?>

Nach dem Aufruf wird der Zeiger in der Datei um eine ganze Zeile verschoben.

Um den gesamten Inhalt der Datei in einem Rutsch einzulesen, musst Du zwei Funktionen in einem Aufruf miteinander kombinieren -- fread() und filesize(). filesize() benötigt einen Dateinamen als Parameter und liefert Dir die Größe der Datei zurück. Der Aufruf für die Datei "datenbank.txt" sieht dann wie folgt aus:

<?php
  $myfile = fopen("datenbank.txt", "r");
  $daten = fread($myfile,filesize("datenbank.txt"));
?>

In der Variable $daten befindet sich nun der Dateiinhalt als fortlaufende Zeichenkette.

Prüfen auf das Dateiende

Um nicht über das Dateiende hinaus zu lesen, liefert PHP die Hilfsfunktion feof() mit. Als Parameter benötigt feof() das Handle einer zuvor geöffneten Datei. Der nachfolgende Aufruf zeigt, wie Du überprüfst, ob der Dateizeiger bereits auf das Ende der Datei zeigt.

<?php
  $myfile = fopen("datenbank.txt", "r");
  if (feof($myfile)) {
    echo("Das Dateiende ist erreicht.");
  }
?>

Zeilenweises Lesen aus einer Datei formulierst Du dann mit einer while-Schleife wie folgt:

<?php
  $myfile = fopen("datenbank.txt", "r");
  while(!feof($myfile)) {
    echo fgets($myfile) . "<br>";
  }
?>

Die while-Schleife wird so lange durchlaufen, wie das Ende der Datei noch nicht erreicht ist. In jedem Schleifendurchlauf wird eine neue, komplette Zeile aus der Datei gelesen und danach ausgegeben.

In Dateien schreiben

Als nächsten Schritt lernst Du, Daten in eine Datei zu schreiben. Du siehst hier den vollständigen Aufruf, da Du zuerst noch die Datei zum Schreiben öffnen musst (Modus "w"). Als Daten benutzen wir eine Variable $inhalt mit einer Zeichenkette. Die beiden Zeichen "\n" am Ende der Zeichenkette stehen für einen Zeilenumbruch und sind nur erforderlich, wenn Du ihn auch benötigst.

Das Schreiben in die Datei gelingt mit Hilfe der Funktion fwrite() für "file write". Sie ist identisch mit fputs() -- dem Gegenstück zu fgets().

<?php
  $myfile = fopen("datenbank.txt", "w") or die("Kann Datei nicht anlegen!");
  $inhalt = "Der rote Fuchs springt über den Zaun.\n";
  fwrite($myfile, $inhalt);
?>

Als nächstes Beispiel schreibst Du den Inhalt eines Arrays oder einer Liste in die Datei. Zunächst legst Du die Liste und deren Inhalt fest -- hier am Beispiel einer Einkaufsliste. In einer foreach-Schleife gehst Du die Liste durch und schreibst jedes Listenelement als separate Zeile in die Ausgabedatei.

<?php
  $myfile = fopen("datenbank.txt", "w") or die("Kann Datei nicht anlegen!");
  $einkaufsliste = array("Milch", "Schokolade", "Tomaten", "Mehl");
  foreach ($einkaufsliste as $eintragsnummer => $posten) {
    fwrite($myfile, $posten . "\n");
}
?>

Die Ausgabedatei hat nach der Ausführung den folgenden Inhalt:

Milch

Schokolade

Tomaten

Mehl

Dateien wieder schließen

Ist der Lese- oder Schreibvorgang für die Datei abgeschlossen, musst Du die Datei wieder schließen. Dann wird auch das reservierte Filehandle wieder freigegeben. Das Betriebssystem hat nur eine bestimmte Menge davon und daher ist es ratsam, mit dieser Resource sparsam umzugehen.

Das Schließen der Datei erfolgt mit Hilfe der Funktion fclose(). Das kürzt "file close" ab. Notwendig ist im Aufruf nur das Filehandle zur Referenz:

<?php
  $myfile = fopen("datenbank.txt", "r");  
  fclose($myfile);
?>

Vereinfachungen

Oben hast Du gesehen, wie Du zeilenweise den Inhalt einer Datei einlesen kannst. Für große Dateien ist das mühsam, weshalb PHP eine Vereinfachung bereitstellt. Das ist die Funktion file(). Sie öffnet die Datei, liest den Inhalt zeilenweise in eine Liste und schließt die Datei danach wieder. Damit wird das Lesen und Ausgeben der Einkaufsliste von weiter oben ein schlichter Einzeiler mit einer foreach-Schleife:

<?php
  $einkaufsliste = file("einkaufsliste.txt");
  foreach ($einkaufsliste as $posten) {
    echo $posten . "<br>";
  }
?>

Nützliche Hilfsfunktionen

Was wäre die Programmierung ohne Tricks. Hier kommen drei Funktionen, die Dir das Leben erheblich erleichtern.

Den Anfang macht die Funktion file_exists(). Sie prüft, ob die angegebene Datei überhaupt existiert. In der Programmierung sieht das dann wie folgt aus:

<?php
  $dateiname = "schatztruhe.txt";

  if (file_exists($dateiname)) {
    echo "Die Datei $dateiname existiert";
    echo "Lese Inhalt der Datei ...";
  } else {
    echo "Die Datei $dateiname existiert leider nicht";
  }
?>

Kandidat 2 ist die Funktion is_readable(). Sie klärt, ob die angegebene Datei lesbar ist:

<?php
  $dateiname = "schatztruhe.txt";

  if (file_exists($dateiname)) {
    echo "Die Datei $dateiname existiert";
    if (is_readable($dateiname)) {
      echo "Lese Inhalt der Datei ...";
    } else {
      echo "Kann Datei leider nicht lesen";
    }
  } else {
  echo "Die Datei $dateiname existiert leider nicht";
  }
?>

Der dritte Kandidat ist die Funktion is_writable(). Sie ist das Gegenstück zu is_readable() und klärt, ob die angegebene Datei schreibbar ist:

<?php
  $dateiname = "schatztruhe.txt";

  if (file_exists($dateiname)) {
    echo "Die Datei $dateiname existiert";
    if (is_writable($dateiname)) {
      echo "Schreibe Daten in die Datei ...";
    } else {
      echo "Kann Daten leider nicht in die Datei schreiben";
    }
  } else {
  echo "Die Datei $dateiname existiert leider nicht";
}
?>

Fazit

PHP deckt den Umgang mit Dateien -- Lesen und Schreiben -- vollständig ab. Die vorgestellten Funktionen sind unkompliziert und erlauben eine flinke und zuverlässige Kommunikation mit dem Dateisystem.

Jetzt bist du gefragt: Wie kannst du den Umgang mit deinen Dateien einfacher gestalten? Hast du bereits Ideen, die dir lästige Arbeiten mit Textdateien abnehmen können? Ich freue mich auf deine Ideen und nützliche Skriptlösungen in den Kommentaren.

Programmierer-Crashkurs für Anfänger...kostenlos!
Baue echte Apps, ohne Vorwissen, ohne Installation!
toolbox 1
Email eintragen und sofort loslegen: