SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=218&group=38
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Erzeugen und Schreiben von Dateien


Eine neue Datei anzulegen ist mithilfe der Funktionen fopen() und fwrite() recht einfach.

Beispiel

<?php

$datei = fopen("daten.txt","w");
echo fwrite($datei, "Hallo Welt",100);
fclose($datei);

?>

Ausgabe
10

Die Funktion gibt die Anzahl der Zeichen zurück, welche in die neue Datei daten.txt geschrieben wurden. Das letzte Argument von fwrite() ist übrigens optional; sollte die Anzahl der Zeichen aus der Zeichenfolge den Wert überschreiten, wird die Zeichenfolge auf den festgelegten Wert gekürzt. Zusätzlich ist zu beachten, dass fwrite() den internen Dateizeiger weitersetzt. Dieser steht nach der Ausführung hinter dem letzten geschriebenen Zeichen. Sollten Sie fwrite() erneut aufrufen, wird die neue Zeichenfolge an den vorhandenen Text angefügt.


In eine vorhandene Datei schreiben

Beim Schreiben in eine vorhandene Datei kommt es vor allem darauf an, mit welcher Zugriffsmethode Sie die Datei öffnen. Hierbei sind folgende Situationen zu unterscheiden:

Die interessanteste Methode dürfte die zweite Variante sein. Hierbei handelt es sich um einen Zugriff auf eine bereits bestehende Datei, jedoch an einer beliebigen Stelle und nicht am Anfang oder am Ende der Datei. Hierfür benötigen Sie Funktionen, mit denen Sie die Position des Dateizeigers abfragen und setzen können. Diese habe ich in der folgenden Tabelle für Sie zusammengefasst:

FunktionBeispielBedeutung
feof (handle)echo feof($dateihandle);Prüft, ob der Dateizeiger am Ende der Datei steht.
fseek (handle, offset [,postion])fseek ($dateihandle, 10, SEEK_CUR);Positioniert den Dateizeiger auf eine beliebige Stelle innerhalb der Datei.
ftell (handle)echo ftell($dateihandle);Ermittelt die aktuelle Position des Dateizeigers.
rewind(handle)rewind($dateihandle);Positioniert den Dateizeiger an den Anfang der Datei.


Die Funktion fseek() benötigt einen offset (Versatzwert), um den Dateizeiger ausgehend von einer festgelegten Position neu zu positionieren. Auf welche Startposition sich der Versatz bezieht, bestimmen Sie im letzten Argument. Dieses Argument ist optional.
Wenn Sie darauf verzichten, zählt der Versatzwert vom Anfang der Datei. Die Startposition lässt sich mithilfe einer der folgenden Konstanten bestimmen:

Die aktuelle Position können Sie mit der Funktion ftell() auslesen. Das folgende Beispiel kombiniert beide Funktionen und stellt die relative Positionierung mit SEEK_CUR dar:

<?php

$datei = fopen("daten.txt","r+");
fseek($datei, 50, SEEK_CUR);
echo ftell($datei) . "<br>";
fseek($datei, 15, SEEK_CUR);
echo ftell($datei) . "<br>";
fclose($datei);

?>

Ausgabe
50
65

Beachten Sie, dass die Datei mit dem Zugriffsmode »r+« geöffnet wurde. Der Dateizeiger lässt sich dann auch für das Schreiben frei positionieren. Verwenden Sie hingegen den Modus »a« (bzw. »a+«), werden sämtliche Daten an das Ende der Datei angefügt, unabhängig davon, wo gerade der Dateizeiger steht. Die Positionierung mit fseek() können Sie dann lediglich für das Auslesen nutzen.