:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte
Unternehmen im
Anbieterverzeichnis von SELFPHP
:: SELFPHP Forum ::
Fragen rund um die Themen PHP? In über
120.000 Beiträgen finden Sie sicher die passende
Antwort!
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
:: Qozido ::
Die Bilderverwaltung mit Logbuch für
Taucher und Schnorchler.
|
|
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:
- Sie wollen weitere Daten an die Datei anfügen. In diesem Fall wählen Sie den Wert »a« (bzw. »a+«). Die Datei wird dann so geöffnet, dass ein schreibender Zugriff nur am Ende der Datei erfolgen kann.
- Sie wollen an einer beliebigen Stelle Daten in die Datei schreiben. Die an dieser Stelle befindlichen Daten werden dann jedoch überschrieben. In diesem Fall öffnen Sie die Datei mit der Einstellung »r+«. Der Dateizeiger steht dann am Anfang der Datei. Um an einer beliebigen Stelle zu schreiben, muss der Dateizeiger mit der Funktion fseek() positioniert werden.
- Sie wollen eine bestehende Datei ganz neu schreiben, also keine bestehenden Daten übernehmen. In diesem Fall wählen Sie den Zugriffsmodus »w« (bzw. »w+«). Im Grunde wird die Datei hierdurch gelöscht und mit dem gleichen Namen neu erzeugt.
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:
| Funktion | Beispiel | Bedeutung | 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:
- SEEK_SET – Als Startposition wird der Dateianfang angenommen. Der Versatzwert steht dann auch für die absolute Position. Diese Konstante entspricht dem Standardwert und muss daher nicht unbedingt angegeben werden.
- SEEK_CUR – Als Startposition wird die aktuelle Position angenommen. Der Versatzwert bezieht sich dann auf diese Position.
- SEEK_END – Als Startposition wird das Dateiende angenommen. Das bedeutet, dass der Dateizeiger auch nach dem eigentlichen Ende der Datei positioniert werden kann. Diese Eigenschaft macht es möglich, eine strukturierte Datei mit Datensätzen fester Länge zu erzeugen. Die Datei muss hierzu nicht mit SEEK_END geöffnet werden.
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.
|
|
|
|
|
|