Jürgen Schilling - Natur | Fotografie | Technik .

 

JürgenSchilling

Natur | Fotografie | Technik

 
 

 Home

 Black&White
 Cyanotypie
 Fotogramme
 Infrarot
 Jägerprüfung
 Kategorien
 Kirlianfotografie
 Lochkamera
 Makroaufnahmen



Lightbox


 Manuals:
 
Alle Manuals
 Aluminium eloxieren
 Hochspannungsgenerator
 Belichtungszeitentabelle
 Beurteilung v. Negativen
 Blitzlichtfotographie
 Farbmischung
 Filmentwicklung
 Infrarotfotografie
 Teslatrafo
 Teslatrafo Rechner
 Schrauben u. Gewinde

 Entwicklingszeiten:
 Agfa Rodinal
 Kodak D76

 Tiefenschäferechner

 
 Impressum


______

















  
  Bilder pro Gast
  phpMyAdmin
  Counter
  Most viewed
  Logout
  Login
  Theme curve
  Theme my-fruity

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:

   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