![]() Technikerschule Nördlingen |
Programmierung dynamischer Internetseiten
|
![]() |
Zugriff auf das Dateisystem Inhalte müssen nicht zwangsläufig in einer Datenbank wie MySQL abgelegt werden. Mit PHP können sowohl Text- als auch Binärdateien bearbeitet werden. Auf diese Weise lassen sich Daten, die zum Beispiel von Maschinen oder Meßgeräten in Dateien geschrieben werden, aufbereiten. Für den Zugriff auf das Dateisystem stehen rund 70 Funktionen zur Verfügung, mit denen sich Eigenschaften von Dateien (Größe, Typ oder letztes Änderungsdatum) und Verzeichnissen bestimmen oder ändern lassen. Auch das Kopieren, Löschen und Schreiben von Dateien ist möglich. Sofern dem Skript entsprechende Lese- und Schreibrechte gewährt werden, kann sich das Programm in der Verzeichnisstruktur frei bewegen und auch Dateien anlegen. 1. Dateien lesen readfile("dateiname"); Mit der Funktion readfile("dateiname") wird eine Datei gelesen und der Inhalt so wie er ist an die Standardausgabe gesendet, das ist normalerweise der Browser. Üblichweise will man aber mit dem Inhalt einer Datei arbeiten. Dafür ist die Funktion file("dateiname") besser geeignet. $arZeilen=file("dateiname"); Bei $arZeilen handelt es sich um einen Array, in dem jede Zeile der Datei ein Element des Arrays ist. Vor allem, wenn man weiß, in welcher Zeile einer Datei ein bestimmter Inhalt steht, lassen sich Daten auf diese Weise einfach visualisieren. Ein Beispiel: Eine Wetterstation zeichnet Uhrzeit, Temperatur, Luftfeuchtigkeit und Windgeschwindigkeit auf. In regelmäßigen Abständen werden die Daten in eine Datei geschrieben. Jeder Wert bekommt eine Zeile, bei jedem Messvorgang wird die Datei neu geschrieben. Die Datei wetterdaten.txt könnte so aussehen:
Mit $wetter_jetzt=file("wetterdaten.txt"); ließen sich die vier Zeilen in einen Array einlesen, deren einzelne Elemente in eine HTML-Datei eingebaut werden. Mit der Funktion chop() werden "Whitespaces" am Ende des Strings entfernt. "Whitepaces" sind Formatierungszeichen wie Zeilenumbrüche, Leerzeichen oder Tabulatoren. In unserem Beispiel wird damit der Zeilenumbruch am Ende jeder Zeile entfernt. Besonders wichtig ist dies, wenn mit Daten aus Dateien gerechnet werden soll. Das Ganze sieht dann so aus:
Das Ergebnis im Browser (demo):
2. Dateien öffnen, schreiben Nicht immer soll die ganze Datei ausgelesen werden, oder neben dem Lesen soll auch etwas hineingeschrieben werden. Für das Schreiben oder die Arbeit mit einem "Dateizeiger" muss die Datei geöffnet werden. Dies geschieht mit der Funktion $handler=fopen("dateiname"). Dabei wird ein so genannter "Handler" erzeugt. Über diese Referenz auf die Datei greifen verschiedene Funktionen auf den Inhalt zu. Ein Attribut legt fest, was mit der Datei möglich ist. Das Attribut kann einen der folgenden Werte haben:
Für Binärdateien wie Bilder wird ein b hinzugefügt also br+ oder bw etc. Wenn unsere Wetterstation die Daten mit PHP auch schreibt, wird die Datei zunächst geöffnet.
Eingefügt werden Inhalte mit der Funktion fputs($handle,$inhalt), und zwar an der Stelle, an der der Dateizeiger steht. Deshalb ist es von Bedeutung, ob Sie als Attribut von fopen() w+ oder a+ verwenden. Das a steht übrigens für append (zu deutsch anhängen), denn der neue Inhalt wird an den bestehenden angehängt. Um die Wetterdaten in die Datei zu schreiben, könnte folgendes Skript verwendet werden. Beachten Sie die \n, mit denen der Zeilenwechsel in der neuen Datei erzeugt wird. Ohne diesen Zeilenwechsel würden alle Daten in eine Zeile geschrieben werden. Diesen Zeilenwechsel müssen wir beim Auslesen mit der Funktion chop() wieder entfernen (s.o.). Genauso wichtig wie fopen() ist die Funktion fclose(), mit der die Datei geschlossen wird.
Man muss aber nicht zwangsläufig die gesamte Datei neu Schreiben. Wenn, wie im obigen Beispiel, mit der file()-Funktion die Zeilen in einen Array geladen wurden, lassen sich auch einzelne Zeilen manipulieren. Allerdings muss dazu der Array wieder in einen String verwandelt werden, damit die Datei mit fputs() neu geschrieben werden kann. Dies geschieht mit der Funktion implode(), die als Argument einen Separator (wird in unserem Fall nicht benötigt) und den Array erhält. Um nur die Temperaturdaten zu ändern, können wir das Skript wie folgt anpassen.
Sollen die Wetterdaten gespeichert werden, ist es wahrscheinlich sinnvoller, jeden Wetterdatensatz in eine Zeile zu schreiben und die einzelnen Felder mit einem Trennzeichen zu separieren.
Wir könnten, wie oben, zunächst die file()-Funktion verwenden. Es geht aber auch mit fgets(). Fgets() liest von der Position des Dateizeigers, bis eines der folgenden Ereignisse eintritt:
Um die Datei korrekt auslesen zu können, müssen wir Sie also mit einem Attribut öffnen, das den Dateizeiger an den Anfang von wetterdaten.txt setzt. Mit einer while()-Schleife wird dann Zeile für Zeile ausgelesen und deren Elemente mit der Funktion split("trennzeichen",$zeile) in einen Array eingelesen werden.
Und das ist das Ergebnis (demo):
Eine Alternative zum Einlesen des Eregebnisses der Funktion split()
in einen array ist die Funktion list(). Da bekannt ist, in wie
viele Einzelteile die Zeile zerlegt wird (nämlich 4) kann man die
Teile auch jeweils in einen String einlesen. Die Zeile sieht dann so aus
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|