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)

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Keine weiterführenden Beiträge.