|
Home
Black&White
Fotogramme
Infrarot
Kategorien
Lightbox
Lochkamera
Portrait
Advanced
___________
Service:
EDV-Manuals Belichtungszeitentabelle
Schrauben u. Gewinde
Einführung in die:
Beurteilung v. Negativen
Farbmischung
Filmentwicklung
Infrarotfotografie
Blitzlichtfotographie
Entwicklungszeiten:
Agfa Rodinal
Kodak D76
Tiefenschärferechner:
Komplex
Einfach
Fotolabor
Kontakt / Impressum
______
Zähler:
Bilder pro Gast
Zugriffszähler
myPHPadmin
B4YCounter
Login
Logout
Files
Alle Bilder als Link
|
Funktionen zum öffnen, lesen und
schreiben von Dateien
-- Einfacher Counter ohne Datenbank und
IP-Sperre
|
|
|
Als kleines, einführendes Beispiel für die PHP-Dateifunktionen fopen, fgets,
fclose, flock und fwrite wollen wir nun einen simplen Counter
betrachten, der auf einer Textdatei basiert. Das ist besonders praktisch, wenn
Sie auf ihrem Account keinen Zugang zu einer Datenbank haben oder Sie sich nicht
mit Datenbankprogrammierung beschäftigen wollen.
Das Skript kann man wg. der fehlenden IP-Sperre nur zu Übungszwecken nutzen.
<!-- counter.php -->
<?php
// (1): Die Datei mit den Daten wird geöffnet und ausgelesen
und vorerst wieder geschlossen.
$filename = 'counter.txt';
$datafile = @fopen($filename , "r");
if ($datafile <=0)
{
echo "Datenfile nicht gefunden oder kaputt!";
exit;
}
else
{
$content = fgets($datafile, "12");
fclose($datafile);
}
// (2): Die ausgelesene Zahl wird um 1 erhöht und ausgegeben.
++$content;
echo $content;
// (3): Die Datei wird abermals geöffnet und die Daten mit den neuen
Werten überschrieben
$datafile = @fopen($filename , "w");
flock($datafile, "2");
fwrite($datafile, $content );
flock($datafile, "3");
fclose($datafile);
?>
1) Als erstes speichern wir der Übersichtlichkeit halber den Namen und
Pfad der Textdatei die den Zähler speichern soll (hier counter.txt).
Denkbar ist hier jede beliebige Textdatei mit jeder beliebigen Endung. Unter Windows öffnen sie
einfach Notepad, tragen als erstes Zeichen 0 (bzw. die Zahl, mit der der Counter
starten soll zu zählen) ein
Als nächstes wird die Datei geöffnet. Das geschieht dadurch, das die Daten, die
die fopen-Funktion zurückgibt einer Variablen zugewiesen werden. Durch diese
Variable, sie wird auch Filepointer
genannt wird die Datei angesprochen, bis die Datei wieder geschlossen wird.
Das @ vor der Funktion verhindert lediglich die Ausgabe von Fehlern. Danach wird
geprüft, ob die Datei nicht vorhanden bzw. ob sie beschädigt ist. Trifft eines
der beiden Dinge zu, so wird eine Fehlermeldung ausgegeben und der Skript
beendet. Ist die Datei in Ordnung, so wird ihr Inhalt ausgelesen und der
Variable $content zugewiesen. Das geschieht mit fgets, das als ersten Parameter
den Filepointer und als zweiten die Anzahl der Zeichen, die gelesen werden. Der
zweite Parameter (($datafile, "12"))ist optional und bedingt in unserem Beispiel,
daß nur die
ersten 999999999999 Besucher korrekt gezählt werden. Die Datei wird erstmal wieder geschlossen.
2) Die ausgelesen Zahl wird mit den beiden Pluszeichen um 1 erhöht und
anschließend die Zahl mit echo ausgegeben.
fwrite schreibt etwas in eine Datei. Wieder ist der Filepointer der erste Parameter, der zweite ist das, was geschrieben werden soll. In dem Counter ist das der um 1 erhöhte Wert. Die Sperre wird wieder aufgehoben. Und die Datei geschlossen.
3) Nun wird die Datei wieder geöffnet, diesmal aber im Modus "w". Mit der
Funktion flock wird verhindert, daß eine andere Instanz des Skripts auf die
Datei zugreift, bis sie aktualisiert wurde. Auch hier ist der erste Parameter
der Filepointer und der zweite die auszuführende Operation.
4) Counter in eine *.php Datei einbinden ( hier in unser "hello-world.php"
Skript).
Die counter.php wird via I-Frame in das hello-world.php Skript eingebaut.
<HTML>
<?php
echo "Hello World";
<iframe src="counter.php" width="200" height="54"
scrolling="no"
noresize name="I2" frameborder="0" marginwidth="0" marginheight="0"></iframe>
?>
</HTML>
PHP - fopen
Syntax: fopen("Dateiname","Modus")
Erklärung:
Die Funktion fopen öffnet eine Datei zum Schreiben und/oder Lesen und
gibt ein Dateihandle zurück. Mit diesem kann mit den Funktionen fgets, fputs
usw. auf die Datei zugegriffen werden. Die sog. Handles erleichtern den Zugriff
auf Dateien oder Verzeichnisse, indem nach dem Öffnen nicht bei jedem Zugriff
der komplette Pfad bzw. Name, sondern nur das Handle angegeben werden muß.
Die Datei kann auch auf einem anderen Server liegen, in diesem Fall muß statt
dem bloßen Dateinamen eine komplette URL (z. Bsp. "http://www.domain.de/verzeichnis/datei.htm")
oder FTP-Pfad (z. Bsp. "ftp://name:passwort@server.de/") angegeben werden. Da
keine HTTP-Redirects (Weiterleitungen) unterstützt werden, muß eine URL ggf. mit
abschließendem "/" geschrieben werden (z.Bsp. "http://www.phpbox.de/").
Der Parameter "Modus" bestimmt, für welche Form des Zugriffs die Datei geöffnet
wird. Dabei sind folgende Modi möglich:
r Datei wird nur zum Lesen geöffnet, der Dateizeiger wird auf
den Anfang der Datei gesetzt.
r+ Datei wird zum Lesen und Schreiben geöffnet, der
Dateizeiger wird auf den Anfang der Datei gesetzt.
w Datei wird nur zum Schreiben geöffnet, der Dateizeiger wird
auf den Anfang der Datei gesetzt. Sofern die Datei bereits besteht, wird die
Größe auf 0 Bytes gesetzt (d.h. ein eventueller Inhalt wird überschrieben).
Sofern die Datei nicht existiert, wird diese neu angelegt.
w+ Datei wird zum Lesen und Schreiben geöffnet, der Dateizeiger wird auf den
Anfang der Datei gesetzt. Sofern die Datei bereits besteht, wird die Größe auf 0
Bytes gesetzt (d.h. ein eventueller Inhalt wird überschrieben). Sofern die Datei
nicht existiert, wird diese neu angelegt.
a Datei wird nur zum Schreiben geöffnet, der Dateizeiger wird an das Ende der
Datei gesetzt (d.h der Inhalt wird nicht überschrieben, sondern neuer Inhalt am
Dateiende hinzugefügt). Sofern die Datei nicht existiert, wird diese neu
angelegt.
a+ Datei wird zum Lesen und Schreiben geöffnet, der Dateizeiger wird an das Ende
der Datei gesetzt (d.h der Inhalt wird nicht überschrieben, sondern neuer Inhalt
am Dateiende hinzugefügt). Sofern die Datei nicht existiert, wird diese neu
angelegt.
Sofern es sich um eine Binärdatei handelt (z. Bsp. .jpg-Bilder), muß dem Modus
jeweils noch "b" vorangestellt werden (z. Bsp. "br", "br+", "bw"...).
Für einen Schreibzugriff ist es erforderlich, das sowohl für das Skript, als
auch für das Verzeichnis in das geschrieben wird, die entsprechenden
Schreibrechte gesetzt sind (vgl. chmod).
Nachdem die Datei bearbeitet wurde, sollte das Dateihandle mit der Funktion fclose wieder geschlossen werden, damit andere Prozesse auf die Datei zugreifen
können.
Beispiel:
<?php
$dateihandle = fopen("../index.htm");
?>
Ergebnis:
Die Datei "index.htm" wurde für die weitere Bearbeitung unter dem Handle "$dateihandle"
geöffnet.
PHP - fgets
Syntax:
fgets("Datei-Handle","maximale Länge")
Erklärung:
Die Funktion fgets liest eine Zeile Daten aus der Datei, auf die das
Datei-Handle zeigt, von der Position des Dateizeigers. Das Dateihandle muß zuvor
mit fopen erstellt worden sein (siehe Beispiel 2). Das Auslesen der Daten endet
am Zeilenumbruch (= eine Zeile) oder nach der Anzahl der im Parameter "maximale
Länge" angegebenen Zeichen; je nachdem, welches Ereignis zuerst eintritt. Danach
wird der Dateizeiger ans Ende der ausgelesenen Daten gesetzt, so daß beim
nächsten Aufruf von fgets die folgenden Zeile ausgelesen wird.
Ein Zeilenumbruch am Ende der Zeile wird mit zurückgegeben. Wenn ein Fehler
auftritt (z. Bsp. Dateiende erreicht), so wird FALSE (bzw. 0) zurückgegeben.
Beispiel 1:
<?php
$zeile = fgets($dateihandle,4096);
?>
Ergebnis:
Die Variable "$zeile" enthält eine Zeile aus der Datei auf die das Dateihandle
"$dateihandle" zeigt.
Beispiel 2:
Die Datei "beispiel.txt" hat folgenden Inhalt:
PHP wird immer beliebter,
nur die Funktion fgets nicht.
<?php
$dateihandle = fopen("beispiel.txt","r");
$zeile = fgets($dateihandle, 4096);
echo $zeile;
?>
Ergebnis:
PHP wird immer beliebter,
PHP - fclose
Syntax: fclose("Datei-Handle")
Erklärung:
Die Funktion fclose schließt eine zuvor mit fopen, popen oder fsockopen
geöffnete Datei auf die das Dateihandle "Datei-Handle" zeigt. Dies ist
notwendig, damit andere Prozesse auf die Datei zugreifen können. Im Erfolgsfall
wird TRUE (bzw. 1) zurückgegeben, ansonsten FALSE (bzw. 0).
Beispiel:
<?php
fclose($dateihandle);
?>
Ergebnis:
Die Datei, auf die das Dateihandle "$dateihandle" zeigt, wurde geschlossen.
PHP -flock
Mit der Funktion flock wird verhindert, daß eine andere Instanz des Skripts auf die Datei zugreift, bis sie aktualisiert wurde.
flock kann vier Operationen ausführen:
1 - für alle lesbar aber nicht veränderbar
2 - für keine andere Instanz lesbar oder änderbar
3 - eine Sperre aufheben
4 - Zugriffe während der Sperre erlauben.
PHP - fwrite
(=fputs)
Syntax: fwrite("Datei-Handle","Daten"[,"maximale Anzahl"])
Erklärung:
Die Funktion fwrite schreibt den Inhalt der Zeichenkette "Daten" in die Datei,
auf die das Dateihandle "Datei-Handle" zeigt. Letzteres muß zuvor mit fopen
erstellt worden sein (siehe Beispiel 2). Für den Schreibvorgang ist es
erforderlich, daß sowohl für das ausführende Skript, als auch für das
Verzeichnis in das geschrieben wird, die entsprechenden Schreibrechte vergeben
sind (vgl. chmod).
Wenn der optionale Parameter "maximale Anzahl" angegeben ist, wird - je nachdem
was zuerst eintritt- der Schreibvorgang bis zum Ende der Zeichenkette "Daten"
oder der in "maximale Anzahl" angegebenen Anzahl von Bytes fortgeführt. Ohne den
Parameter "maximale Anzahl" wird der Schreibvorgang bis zum Ende der
Zeichenkette "Daten" durchgeführt. Bei Binärdaten sollte der Parameter
allerdings möglichst verwendet werden, da sonst durch das Zeichen für einen
Zeilenumbruch Fehler auftreten können.
An welche Position innerhalb der Datei die Daten geschrieben werden, hängt
zunächst vom gewählten Modus bei fopen ab. Nach dem Schreibvorgang wird der
Dateizeiger ans Ende der geschriebenen Daten gesetzt, so daß beim nächsten
Aufruf von fwrite die Daten an die zuvor geschriebenen angehängt werden. Die
Position des Dateizeigers läßt sich auch mit der Funktion fseek verschieben.
Beispiel 1:
<?php
fwrite($dateihandle, $daten);
?>
Ergebnis:
Der Inhalt der Variablen "$daten" wurde in die Datei, auf die das Dateihandle "$dateihandle"
zeigt, geschrieben.
Beispiel 2:
<?php
$daten = "Ein neuer Dateiinhalt";
$dateihandle = fopen("beispiel.txt","w");
fwrite($dateihandle, $daten);
?>
Ergebnis:
Die Datei "beispiel.txt" hat den Inhalt: Ein neuer Dateiinhalt
|
|
© 19.09.2007, Juergen Schilling |
|
|