Dateien
Bisher sind wir in der Lage, mit Variablen zu arbeiten, und diese zu überprüfen.
Zwar können wir so schon einen geschützten Bereich programmieren, aber oft möchte man ja bestimmte Werte auch abspeichern. Dies können z.B. Daten aus einem Formular oder ähnliches sein.
Das abgespeicherte möchte man dann später natürlich auch wieder ausgeben. Für solche Aufgaben verwendet man in PHP Dateien. In Dateien speichert man per PHP seine Werte und kann sie an anderer Stelle wieder auslesen
Zunächst ist zu beachten, dass das Arbeiten mit Dateien immer in drei Schritten abläuft. Eine Datei wird geöffnet, danach wir der Inhalt in die Datei geschrieben oder aus der Datei gelesen (oder auch beides) und zum Schluss wird sie wieder geschlossen. Das öffnen von einer Datei ist eigentlich recht einfach:
[php]<?php $datei = fopen([i]Dateiname[/i],[i]Modus[/i]);?>[/php]
Der PHP-Befehl fopen öffnet die Datei Dateiname, derModus bestimmt, was wir mit der Datei machen möchten (lesen bzw. schreiben).
Außerdem müssen wir darauf achten, ab welcher Zeile PHP anfängt zu lesen (Anfang oder Ende der Datei).
Auch wichtig ist, ob PHP eine Datei anlegt oder nicht, sofern diese noch nicht existiert. Wenn man mit PHP neue Dateien erstellen möchte, dann sollte man nicht r bzw. r+ benutzen.
Wenn w / w+ benutzt wird, musst du darauf achten, dass der Inhalt des Dokuments ohne Nachfrage überschrieben wird.
Für das Anlegen eines Logfiles benutzt man den Modus a, da der neue Eintrag immer am Ende angehängt wird.
Wir machen jetzt als Beispiel einen simplen Textcounter (ohne Reloadsperre), denn an diesem Beispiel lernen wir so gut wie alles, was wir später brauchen.
Zu erst öffnen wir eine Datei, ich empfehle eine Textdatei (counter.txt) zu benutzen, aber man kann auch jedes andere Format benutzen.
[php]<?php $datei = fopen("counter.txt","r+");?>[/php]
Bei dem Modus r+ müssen wir darauf achten, das es diese Datei bereits vorhanden ist.
Dann wollen wir ja abfragen, wie viele Personen diese Seite schon aufgerufen haben, deswegen lesen wir die Datei zuerst aus.
<?php $counterstand = fgets($datei,10);?>
Mit fgets lesen wir eine Datei, der erste Wert in der Klammer gibt an, welche Datei wir lesen, der zweite Wert wie viele Zeichen wir lesen.
In diesem fall 10 Zeichen, weil ein Counter i.d.R. nicht mehr als 10 Zeichen hat.
Das gelesene Speichern wir in der Variable $counterstand.
Aber was ist wenn diese Datei leer ist?
Dazu benutzen wir eine einfache if-Anweisung.
[php]<?php if($counterstand =="") { $counterstand =0; }?>[/php]
Hier wird überprüft, ob die Datei einen Inhalt hat, wenn sie keinen Inhalt hat, so wird der Counterstand auf 0 gesetzt.
Wir wollen ja, wenn der Besucher die Site besucht, den Counterstand um 1 erhöhen.
Dies geht mit $counterstand++;.
Dabei wird der Wert von $counterstand um 1 erhöht. Der neue Wert ist wieder in $counterstand gespeichert.
Danach müssen wir dem Besucher die Zahl ausgeben, das machen wir ganz einfach mit echo.
<?php $counterstand++; echo $counterstand;?>
Durch das lesen des Counterstandes/der Datei, ist der ‚Dateizeiger‘ nicht mehr am Anfang der Datei.
Würden wir jetzt den neuen Wert speichern, so würde der alte Wert nicht überschrieben werden. So würde aus dem Counterstand 1 plötzlich eine 12 werden.
<?php rewind($datei);?>
Mit rewind setzten wir den Dateizeiger wieder an den Anfang der Datei.
Und anschließend tragen wir den neuen Wert wieder in die Datei ein.
<?php fwrite($datei, $counterstand);?>
Mit fwrite (man kann auch fputs benutzen) tragen wir in die Datei ($datei) den neuen Counterstand (der in der Variable$counterstand ist) ein.
Zum Schluss schließen wir noch die Datei:
<?php fclose($datei);?>
Unser gesamte Code sieht dann so aus:
<?php $datei = fopen("counter.txt","r+"); $counterstand = fgets($datei,10);if($counterstand =="") { $counterstand =0; } $counterstand++; echo $counterstand; rewind($datei); fwrite($datei, $counterstand); fclose($datei);?>
Durch die Arbeit mit Dateien sind auch noch viele weitere Anwendungen möglich, z.B. Logfiles, Newsscripts, Gästebücher und sogar Foren.
Allerdings sind diese Sachen dann meistens alle recht Simpel gehalten und bieten kaum weitere Funktionen, da dies sehr schwer zu realisieren ist.
Deswegen sollten wir uns nicht solange damit aufhalten, sondern lieber mit Datenbank (MySQL) arbeiten.