PHP – Arbeiten mit Textdateien

von Hannes Sander

Mit PHP kann man schnell und einfach auf Textdateien zurückgreifen,
und diese als Datenbanken benutzen. Zwar sind Textdateien nicht
ganz so konfortabel wie Datenbanken, bei kleinen PHP Anwendungen
erfüllen Sie jedoch durchaus ihren Zweck.

Arbeiten mit Textdateien
Textdateien sind eine einfache Möglichkeit, Daten zu speichern.
Sie sind zwar nicht so komfortabel wie Datenbanken, erfüllen aber
durchaus ihren Zweck.

Was ist eine Textdatei?
Eine Textdatei ist eine Datei, die so genannte ASCII-Zeichen
enthält und, neben diesen, keine weiteren Steuerungszeichen, wie
dies zum Beispiel bei den *.doc-Dateien von Microsoft Word der Fall
ist. Sie können ganz einfach mit Notepad (Dem Standarteditor von
Windows) erstellt werden. Dazu gehen Sie einfach auf "Start
-> Programme -> Zubehör -> Editor". Nun können Sie
einfach einen Text eingeben und diesen speichern. Wenn Sie nun eine
*.doc-Datei mit Notepad öffnen, so erscheint eine Ausgabe, wie sie
in Abb. 1 zu sehen ist.


Abb. 1

Wie Sie sehen, ist so eine Ausgabe
unleserlich und enthält sehr viele, kryptisch anmutende, Zeichen.
Für Word haben diese spezielle Bedeutungen, für unsere Arbeit
sind sie aber völlig belanglos und nur störend. Erstellen Sie
also Textdateien, die Sie mit PHP nutzen wollen, entweder direkt
mit PHP oder mit einem speziellen Texteditor wie zum Beispiel
Notepad oder UltraEdit. Auch HTML-Dateien sind Textdateien,
in denen bloß anstatt des Textes der Quellcode des HTML-Dokuments
gespeichert ist.

Textdateien und PHP
Um nun af Textdateien mit PHP zugreifen zu können, müssen der
Datei mittels CHMod (Ein Zugriffssystem unter Linux) entsprechende
Rechte gegeben werden. Unter Windowsservern entfällt diese Prozedur
weitestgehend, da CHMod hier unbekannt ist und keine Entsprechung
hat. Um sicher zu sein, dass auch alles funktioniert, würde ich
immer zu CHMod 777 oder 775 raten. Das kleine Sicherheitsrisiko
ist für private Seiten eigentlich ohne Belang. Falls Sie das Risiko
minimieren wollen, so sollten Sie alles erstmal mit CHMod 666 ausprobieren
und, falls etwas nicht funktioniert, schrittweise steigern, bis
es funktioniert.
Zurück zum eigentlichen Thema. Bevor Sie mit der Datei arbeiten
könne, müssen Sie diese erstmal öffnen. Dies geschieht in PHP mit
der Funktion fopen(). Diese erzeugt ein so genanntes Dateihandle,
also einen "Verweis" zu der Datei. Der erste Parameter
der Funktion ist die Adresse der Datei, ausgehend vom aktuellen
Script (also der Position des Scriptes). Relative Angaben wie "../datei.txt"
sind also möglich!
Der zweite Parameter ist die Art, wie die Datei geöffnet werden
soll. Die möglichen Angaben sind in nachfolgender Tabelle zu finden.

 

r Nur Lesen, Dateizeiger am Anfang
r+ Lesen + Schreiben, Dateizeiger am
Anfang
w Nur Schreiben, Dateizeiger am Anfang
w+ Schreiben + Lesen, Dateizeiger am
Anfang
a Nur Schreiben, Dateizeiger am Ende
a+ Schreiben + Lesen, Dateizeiger am
Ende

Bei den Modi w und w+ wird der gesamte Inhalt der Datei gelöscht,
bzw., falls die Datei nicht existiert, eine Datei mit diesem Namen
erzeugt. Wenn sich der Dateizeiger am Ende befindet, werden, im
a-Modus, die Zeichen einfach hinten an den alten Inhalt angefügt.
Ansonsten geht es, im r-Modus, beim Lesen von vorn los.

Nun einmal der Code, der eine Datei im r-Modus öffnet, das Dateihandle
$fp erzeugt und die Datei danach mittels fclose() wieder schließt.

<?
 $fp=fopen("datei.txt","r");

 /* Hier können Dateioperationen folgen */

 fclose($fp);
?>

Schreiben in eine Datei
Für das Schreiben in eine Datei benötigen Sie noch die Funktion
fwrite(). Diese besitzt ebenfalls 2 Parameter. Der erste muss das
Dateihandle sein, das Sie mit fopen() erstellt haben, und der zweite
ein String, der in die Datei geschrieben werden soll. Natürlich
muss die Datei im Modus w oder w+ geöffnet werden. a oder a+ sind
hier nicht anwendbar, da jedes Mal neue Daten in die Datei geschrieben
werden soll.

<?
 $fp=fopen("datei.txt","w");
 
 fwrite($fp,"Hallo, ich bin ein String und stehe in der
Datei!");

 fclose($fp);
?>

Das geht im Modus a genauso, bloß dass dann die neuen Zeichen an
den alten Inhalt der Datei "angehängt" (Daher auch das
a für append) werden. Um eine neue Zeile (Zumindest für PHP) in
die Datei zu schreiben, fügen Sie einfach dem String, der in die
Datei geschrieben wird, an der Stelle, wo der Zeilenumbruch erfolgen
soll, ein "\n" hinzu. Dies wird nachher wichtig, da Sie
mit verschiedenen Funktionen die Datei zeilenweise auslesen können.

Zeilenweises Lesen
Hierzu benötigen Sie die Funktion fgets(). Diese erwartet als
ersten Parameter wiederum das Dateihandle und als zweiten die Anzahl
der Zeichen + 1, die gelesen werden sollen. Abgebrochen wird entweder,
wenn die angegebene Anzahl an Zeichen gelesen wurde oder aber das
Zeilenende erreicht wurde. Um Eine Datei nun zeilenweise auszulesen,
benötigen wir eine while()-Schleife, die solange ausgeführt wird,
bis alle Zeilen gelesen wurden. Der zugehörige Code lautet also:

<?
 $fp=fopen("datei.txt","r");
 
 while($line=fgets($fp,1024))
{
  echo "$line<br>";
 }

 fclose($fp);
?>

Falls nur eine einzige Zeile in der Datei vorhanden ist, beispielsweise
eine Zahl bei einem Counter, so muss die Funktion nur einmal, diesmal
ohne while()-Schleife, aufgerufen werden.

Ein einfacher Counter
Ein Counter zählt die Zahl der Zugriffe auf eine Seite. Zum
Abschluss dieses Artikels lernen Sie, wie Sie einen einfachen Counter
programmieren, der anzeigt, wie viele Seitenabrufe es gab. Dazu
benötigen Sie alle oben beschriebenen Funktionen.
Der Counter soll wie folgt funktionieren: Als erstes wird die Datei
zum Lesen geöffnet und der aktuelle Counterstand ausgelesen. Dann
wird die Datei wieder geschlossen und erneut, diesmal zum Schreiben,
geöffnet. Der alten Zahl wird nun 1 hinzugefügt und der neue Wert
geschrieben. Danach wird die Zahl ausgegeben und die Datei wieder
geschlossen. Den folgenden Quelltext sollten Sie eigentlich mit
ihrem jetzigen Wissen nachvollziehen können:

<?
 $fp=fopen("counter.txt","r");

 $zahl=fgets($fp,1024); //Wenn die Zahl mehr Stellen als 1024
hat, Zahl erhöhen!

 fclose($fp);

 $zahl++; //Aktuellen Zugriff zählen

 $fp=fopen("counter.txt","w"); //Inhalt
löschen

 fwrite($fp,$zahl);

 fclose($fp);

 echo "$zahl Zugriffe"; //Ausgabe
?>

Dieser einfache Zähler lässt sich beliebig erweitern – Er könnte
zum Beispiel eine IP- oder Cookie-Sperre bekommen oder – mittels
einer weiteren Datei – auch die Zahl der Besucher anzeigen, die
aktuell online sind. Experimentieren Sie mit verschiedenen Möglichkeiten!
Ach ja, noch ein Tipp: Speichern Sie immer einen Datensatz pro Zeile
und trennen Sie einzelne Werte mit | oder einem ähnlichen Trennzeichen.
Die Zeile kann dann, beim Lesen, mittels $arr=explode($str);
in ein Array verwandelt werden, auf das sie dann mit $arr[0], $arr[1],
usw. zugreifen können. (hsa)

This entry was posted in PHP. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *