Dathandle - Arbeiten mit Dateien

Vorwort

Schönen Tag, Mittag oder Abend,

Heute möchte ich euch das arbeiten mit Dateien zeigen. Manche denken sich jetzt vielleicht: "Mit Dateien arbeiten? Was kann man schon mit Dateien anfangen". Die Antwort lautet ganz einfach: "Viel". Abgesehen davon das man die Dateien natürlich öffnen kann/muss, kann man in eine Datei schreiben, eine Datei erstellen, eine Datei löschen und natürlich eine Datei auslesen (nicht per include!).

Es sind natürlich einige Grundkentnisse in PHP notwendig bzw. vorrausgesetzt.

Anfang

Damit wir mit Dateien arbeiten können, müssen wir sie natürlich zuerst öffnen. Dies funktioniert ganz einfach mit dem Befehl fopen().

Die Syntax würde so aussehen:

<?php

fopen("filename.txt", "w");

?>


Der 1. Parameter ("filename.txt") ist logischerweise der Name der Datei die geöffnet werden soll. Hier heisst sie "filename.txt" kann aber auch andere Endungen haben wie z.B .php, .htm, .js, .css usw.

Der 2. Parameter ("w") ist ein Modus, er steht in dem Fall für einfaches schreiben.

Modi für fopen()

Wie wir vorher kurz angeschnitten haben, gibt es beim 2. Parameter von fopen() verschiedene Modi. Die verschiedenen Modi (6 an der Zahl) möchte ich euch hier erklären.

Modi:

'r' - Hier wird die Datei nur zum lesen geöffnet, der Dateizeiger wird auf den Anfang der Datei gesetzt.

'r+' - Hier wird die Datei zum lesen und zum schreiben geöffnet, der Dateizeiger wird hier ebenfalls auf den Anfang der Datei gesetzt.

'w' - Diesen Modi haben wir schon kennen gelernt, er schreib jedeglich in eine Datei und setzt den Dateizeiger auf den Anfang der Datei und die Länge der Datei auf 0 Byte. Wenn die Datei NICHT existiert, wird die Datei angelegt, wie das genau funktioniert zeige ich euch später.

'w+' - Bei "w+" wird die Datei zum lesen und zum schreiben geöffnet. Auch hier wird der Dateizeiger auf den Anfang der Datei gesetzt. Die Länge der Datei wird auf 0 Byte gesetzt. Falls die Datei noch nicht existiert wird sie angelegt.

'a' - "a" ist das Gegenteil zu "w". Hier wird die Datei zum schreiben geöffnet, jedoch wird der Dateizeiger am Ende der Datei gesetzt, das heisst der Inhalt wird zu dem bereits bestehenden Inhalt angefügt. Falls die Datei noch nicht existiert, wird sie auch hier erstellt.

'a+' - "a+" ist das Gegenteil zu "w+". Hier wird die Datei zum lesen und zum schreiben geöffnet. Der Dateizeiger wird jedoch wieder auf das Ende der Datei gesetzt. Auch hier wird eine Datei erstellt, falls sie noch nicht existiert.

Eine genaue Übersicht über die Modi findet ihr im Manual beim Befehl fopen().

Bei den meisten Modi findet man die Beschreibung "Falls die Datei noch nicht existiert, wird sie erstellt". Wie das genau funktioniert, möchte ich in einem kleinen Schnipsel plus Kommentare vorstellen.

<?php

// Wir gehen einfach mal davon das auf dem Server noch keine Datei
// vorhanten ist und wir die Datei test.txt erstellen wollen.

$dateiname = "test.txt"; // Variable die den Dateinamen als Wert enthält

$fp = fopen($dateiname, "w"); // Hier wird die Datei test.txt erstellt(!) und geöffnet)

?>


Schreiben und lesen aus einer Datei

Wir können nun eine Datei öffnen bzw. erstellen. Jedoch wollen wir auch etwas in eine Datei schreiben oder etwas aus einer Datei lesen. Wie das funktioniert möchte ich in diesen Abschnitt erklären.

Das schreiben bzw. lesen hat natürlich einen eigenen Befehl.

fwrite, schreiben
fread, lesen

Auch hier möchte ich wieder ein bisschen Code zum besseren Verständniss erläutern.

<?php

$dateiname = "text.txt";

$fp = fopen($dateiname, "w"); // Da wir etwas in die Datei schreiben, setzten wir den Modi "w".

$inhalt = "Das ist ein Test"; // Hier definieren wir den Inhalt den wir in die Dateischreiben wollen, einfach mal in einer Variable.

fwrite($fp, $inhalt); // Hier schreiben wir den Inhalt
fclose($fp); // Hier wird die Handlung wieder geschlossen

?>


Grundsätzlich sollte die Handlung immer mit fclose geschlossen werden.

fwrite() ist einfach zu verstehen.

Beim 1. Parameter (dort wo "$fp" steht) wird die Handlung (die wir logischerweise in der Variable $fp definiert haben) verwendet.

Beim 2. Parameter (dort wo "$inhalt" steht) wird der Inhalt definiert der in die Datei geschrieben werden soll.


Wie lesen wir etwas aus der Datei? Das ist genau so einfach wie das schreiben in eine Datei.

<?php

$dateiname = "test.txt";

$fp = fopen($dateiname, "r"); // Wir öffnen hier die Datei zum lesen.

$fread = fread($fp, filesize($dateiname)); // Hier lesen wir die Datei aus.

echo $fread;

fclose($fp);

?>


Vielleicht seit ihr jetzt ein wenig verschreckt, weil der Code zu kryptisch für euch aussieht. :D Es ist jedoch einfacher als es aussieht.

fread() hat natürlich mehrere Paramater.

Beim 1. Parameter (dort wo "$fp" steht) wird wieder die Handlung definiert.

Beim 2. Parameter (dort wo "filesize($dateiname)" zu finden ist) wird die Länge angegeben. D.h die Länge wie weit der Dateizeiger lesen soll. Hier habe ich einfach einen kleinen Trick verwendet. "filesize" findet nämlich die Größe der Angegebenen Datei ($dateiname, also "test.txt") heraus. Durch diesen Trick wird also alles ausgelesen.

Danach wird die Variable $fread einfach per echo ausgegeben und wir erhalten den Text der in der Variable steht.

Löschen einer Datei

Zum schluss zeig ich euch noch wie man Dateien löscht.

Dies funktioniert ganz einfach mit dem Befehl unlink()

<?php

$dateiname = "test.txt";

unlink($dateiname);

echo "Die Datei wurde gelöscht";

?>


Schon ist die Datei vom Server gelöscht.

Schlusswort

Wenn ihr das Arbeiten mit Dateien beherscht habt ihr schon ein mächtiges Speichermedium zu verfügung. Ihr könnt z.B Dateien als Speichermedium für ein Communityscript verwenden, jedoch würde ich davon abraten, da es nach der Zeit sehr serverlastig wird.

Viel Spaß mit dem Tutorial.

Tschau

TSF

PS.: Ich freue mich über Kritik, Verbesserungen (falls ich Fehler gemacht haben sollte) o.ä.

Kommentare

jozy
jozy am Samstag, 19. März 2005 um 09:29

soweit sehr anschaulich, jedoch wären ein paar sachen zu ergänzen:

es gibt neben fopen(), fread(), fwrite() noch andersnamige funktionen mit ähnlichen/gleichen fähigkeiten

zB popen(), pclose() sie funktionieren ähnlich wie fopen/fclose, allerdings ENTWEDER schreiben ODER lesen.

oder zB fgets() quasi identisch mit fread()

(fortsetzung im folgenden post)

jozy
jozy am Samstag, 19. März 2005 um 09:31

sehr hilfreich auch file("datei.txt"); ließt die datei zeilenweise in ein array (hat keinen zweiten parameter)

oder aber file_get_contents("datei.txt") liest den kompletten inhalt einer datei und erspart somit den filesize()-trick


und ein ganz wichtiger punkt der nicht angesprochen wurde:es ist auch zu beachten, ob die datei überhaupt lese/schreibe/exe-recht besitzt! --> chmod()

regards (kommentar-feld zu kurz :D)

ThePain
ThePain am Sonntag, 20. März 2005 um 01:51

Stimmt, auf das setzten der Rechte (chmod) habe ich vergessen. Aber was die anderen Funktionen angeht, gehörtn sie nicht wirklich zum Dathandle. Da "fopen" eine eigene Handlung produziert. Und ein wenig Eigeninitiative schadet nicht. Den man kann nicht alles aus dem

ThePain
ThePain am Sonntag, 20. März 2005 um 01:52

PHP-Manual erklären. :)

Aber trotzdem Danke für die Kommentare,

Tschau

ThePain