Wie jede Programmiersprache hat PHP Dateioperationen. Mit Hilfe von Dateioperationen kannst Du auf das Dateisystem Deines Webservers zugreifen und Änderungen an Dateien durchführen, Dateien löschen, Dateien neu anlegen usw.. Dateioperationen sind essenziell wichtig, da PHP-Programme nur während der jeweiligen Abfrage der Seite laufen und danach enden. Persistente Informationen, d.h Informationen, die auch nach Programmablauf gespeichert sein sollen, müssen in Dateien abgelegt werden. Später werden wir einen sehr komfortablen Ersatz dafür kennenlernen: das Ablegen in einer Datenbank.
Dateien müssen vor dem Lesen (wie auch Schreiben) zuvor mit der Funktion fopen geöffnet werden. Diese Funktion erhält als ersten Parameter den Dateinamen, als zweiten Parameter den Modus, in welcher sich die Datei befinden soll:
<?php $file = fopen(“myfile.txt”,“r”); ?>
Dabei sind folgende Modi erlaubt:
- r: Nur lesen. Start am Anfang
- r+: Lesen und schreiben. Start am Anfang
- w: Schreiben. Dateizeiger wird auf den Anfang gesetzt, d.h. die Datei wird überschrieben. Wenn keine Datei vorhanden, wird sie angelegt.
- a: Anhängendes Schreiben. Dateizeiger ist auf letzter Position.
- a+: Anhängendes Schreiben und Lesen. Dateizeiger kommt auf letzte Position.
Nachdem die Datei geöffnet worden ist, kann man mit Hilfe von fgets Zeilenweise die Datei auslesen. Danach muss sie wieder mit fclose geschlossen werden. Möchten wir zum Beispiel nur die Datei auslesen und in die HTML-Datei ausgeben, so könnten wir dies wie folgt machen:
<?php $file = fopen(“myfile.txt”,“r”); while (!feof($file)) { $zeile = fgets($file); echo ($zeile); } fclose ($file); ?>
Mit dieser Hilfe ist es nun zum Beispiel möglich, ein sehr einfaches Webseiten-Skript zu programmieren. Häufig ist es bei Webseiten so, dass nur einzelne Teile der Webseite sich verändern. Große Strukturen, die beispielsweise das Menü beinhalten bleiben die ganze Zeit über gleich und wiederholen sich auf jeder Webseite. Hat man nun eine große Webseite und man möchte das Design des Menüs ändern, so kommt man in ein Problem. Einfacher geht dies mit dem oben angegebenen Skript. Schon von Beginn an wird die Menüstruktur in einer externen Datei abgelegt, deren Inhalt beim Herunterladen der Seite einfach in die Seite hineinkopiert wird. Nun ist es möglich an einer Stelle diese Datei ganz einfach zu ändern.
Das öffnen von einer Datei mit Hilfe von fopen zum Schreiben habe ich oben schon besprochen. Nachdem eine Datei zum Schreiben geöffnet ist, kann man mit fputs Zeilen in die Datei hineinschreiben.
<?php fputs($file,“Dies ist ein String zum Schreiben”); // $file ist das von fopen übergebene Handle ?>
Man darf nun nicht vergessen, die Datei mit fclose wieder zu schließen. Es werden Puffer verwandt, um nicht direkt in die Datei schreiben zu müssen und die hohe Anzahl an Zugriffen auf der Festplatte zu vermeiden. Wird eine Datei nicht korrekt geschlossen wird der Puffer nicht auf die Festplatte geschrieben. Demnach treten merkwürdige Effekte auf, dass das Ende der Datei nicht komplett geschrieben wird.
Nun können wir das soeben erworbene Wissen schon einsetzen. Wir möchten einen einfachen Counter für unsere Webseite programmieren, der die Besucher unserer Webseite einfach durchzählt, so dass jeder Besucher weiß, wie besucht unsere Seite ist. Dafür lernen wir jetzt noch zwei weitere Funktionen kennen:
Mit der Funktion flock läßt sich eine Datei für einen exklusiven Zugriff speichern. Da es möglich ist, dass zwei Personen zur gleichen Zeit auf die Webseite zugreifen und zur selben Zeit dementsprechend das Counterfile lesen und wieder schreiben wollen, können sich diese beiden Benutzer in die Quere kommen und eventuell sogar das Counterfile zerstören. Mit der Funktion flock gelingt es uns (auf modernen nicht netzwerkgestützten Dateisystemen) die Datei exklusiv zu sperren.
Die Funktion fseek kann eine Datei an eine beliebige Position spulen. Auf jeder offenen Datei befindet sich zu jeder Zeit ein Zeiger, welcher auf die aktuelle Position zeigt, an welcher gelesen wird. Nachdem wir den Counter gelesen haben, müssen wir die Datei wieder auf die erste Position zurückspulen, damit wir die Datei von dieser Position an wieder schreiben können.
Das Programm sieht wie folgt aus:
<?php $counterfile = fopen (“stand.txt”,“r+”); flock ($counterfile,LOCK_EX); $canWrite = false; // Solange warten bis die Datei für das Schreiben freigegeben ist… while (!$canWrite) { $canWrite = flock($counterfile, LOCK_EX); } // Nun haben wir einen exklusiven Zugriff und wir können den // Counter auslesen und anschließen wieder in die Datei schreiben $counter = fgets ($counterfile); echo ($counter); $counter = $counter + 1; fseek ($counterfile,0); // zurück auf Position 0 // obiger Befehl wird benutzt, um den Dateizeiger zu bewegen fputs ($counterfile,$counter); fclose ($counterfile); ?>
