Dateihandling mit PHP
Sie befinden sich: Home > Php
> Dateihandling mit PHP
Um Dateien mit PHP einlesen zu können, benötigt man zunächst ein
sogenanntes „dateihandle“, was im Grunde genommen nichts anderes als eine
allgemein definierte PHP Variable darstellt.
<?php
$handle = fopen("c:/testdatei.txt","r");
/* an dieser Stelle wird das handle erzeugt
und mit der Funktion fopen() praktisch mit
der Datei testdatei.txt zum Lesen verknüpft
*/
fclose ($handle);
/* lässt das handle von der Datei
und gibt sie somit wieder frei
*/
$dataname="testdatei_2.txt";
$handle_2=fopen($dataname,"r");
/* versucht die in der Variablen
$dataname angegeben Datei zu öffnen
*/
fclose($handle_2);
?>
Erklärung:
Die Funktion fopen() verknüpft ein „handle“ mit einer Datei, um sie
öffnen und lesen zu können. Das handle ist ein Zeiger, der auf ein bestimmtes
Dateiobjekt verweist. In dem obigen Beispiel wird ein handle mit einer Textdatei namens
„testdatei.txt“ erstellt. Mit der Funktion fopen() kann man die Datei zum
Lesen öffnen. Danach schließt man das handle mit der Funktion fclose(), um
das handle von der Datei zu lösen und sie somit wieder freizugeben.
Es ist auch möglich, eine Variable als Dateinamen zu verwenden. In dem Beispiel wird
eine Variable namens $dataname erstellt, die den Namen der Datei enthält. Dann wird
das handle mit der Funktion fopen() mit der in der Variablen $dataname angegebenen Datei
verknüpft. Es wird versucht, die Datei zum Lesen zu öffnen. Danach schließt
man das handle mit der Funktion fclose(), um das handle von der Datei zu lösen und
somit wieder freizugeben
Das zweite Argument, im oben angeführten Beispiel „r“, sagt aus, wie die
Datei geöffnet werden soll.
- „r“ zum Lesen öffnen
- „r+“ zum Lesen und Schreiben öffnen
- „w“ zum Schreiben öffnen leert die Datei
- „w+“ zum Schreiben und Lesen öffnen, leert die Datei
- „a“ Datei zum Anhängen öffnen, hierbei wird der Dateizeiger
ans Ende gesetzt, wenn die Datei nicht existiert wird sie angelegt.
- „a+“ wie „a“ jedoch kann auch gelesen werden
Um in der geöffneten Datei schreiben und lesen zu können, kommen folgende
Befehle zur Anwendung:
- $var = fread ( handle, lenght ); liest eine durch lenght bestimme
Menge Zeichen ein.
- $var = fscanf ( handle , mixed string , variables ); liest eine
Zeichenkette formatiert aus.
- $var =fgetc ( handle ); liest das nächste Zeichen in der Datei
ein
- $var = fgets ( handle , lenght ); liest eine Zeichenkette mit
maximal lenght Zeichen ein, wird häufig verwendet, um in Textdateien
zeilenweise zu lesen, da ein EOL (End Of Line) als Abbruchkriterium gilt.
- fwrite ( handle , content ); schreibt die in content definierte
Zeichenkette in die Datei. content kann auch eine Variable sein.
- fseek ( handle , offset , where ); wird verwendet, um den
Datenzeiger an eine bestimmte Stelle in der Datei zu setzen.
- $var = ftell ( handle ); übergibt die aktuelle Position des
Dateizeigers bezogen auf den Dateianfang an $var.
- feof( handle ); mit dieser Funktion kann der Zustand des
Handles überprüft werden
Im folgenden Beispiel werden alle oben angeführten Funktionen außer feof()
sowie fgetc() verwendet.
<?php
// Dateien mit PHP einlesen
$filename = "test.txt";
$somecontent = "Dieser Text geht in die Datei";
/* prüft vor jedem anderen befehl ob die Datei schreibbar ist */
if (is_writable($filename)) {
// im Folgenden wird die Datei im append
// mode ( Anhängemodus ) geöffnet
// der Dateizeiger wird automatisch ans
// Ende der Datei gesetzt, wo dann
// durch den Befehl fwrite () der Inhalt
// der Variablen $somecontent geschrieben wird
if (!$handle = fopen($filename, "a")) {
echo "kann die Datei ($filename) nicht öffnen";
exit;
}
// schreibt den Inhalt von $somecontent in die Datei
if (fwrite($handle, $somecontent) === FALSE) {
echo "kann nicht in die Datei ($filename) schreiben";
exit;
}
echo "Erfolg, habe ($somecontent) in die
Datei ($filename) geschrieben";
// Ermittelt die aktuelle Position des
// Dateizeigers und gibt diese aus
$position=ftell($handle);
echo "Der Dateizeiger steht
aktuell an der Stelle ($position)";
/* setzt den Dateizeiger an die Anfangsposition der Datei */
fseek($handle,0);
// liest die erste Zeile aus und zeigt sie an
$buffer = fgets($handle, 4096);
echo $buffer;
} else {
echo "Die Datei $filename ist nicht schreibbar";
}
fclose($handle);
?>
Erklärung:
Dieses Skript benutzt die PHP Funktionen is_writable(), fopen(), fwrite(), ftell() und
fseek(), um eine Textdatei einzulesen, Text in die Datei zu schreiben und den Inhalt der
Datei auszugeben.
Zuerst überprüft das Skript mit der Funktion is_writable(), ob die Datei
test.txt schreibbar ist. Ist dies der Fall, wird die Datei im Anhängemodus (append
mode) mit der Funktion fopen() geöffnet. Der Dateizeiger wird automatisch ans Ende
der Datei gesetzt. Nun wird der Inhalt der Variablen $somecontent mit der Funktion
fwrite() in die Datei geschrieben. Die aktuelle Position des Dateizeigers wird mit der
Funktion ftell() ermittelt und ausgegeben. Mit der Funktion fseek() wird der Dateizeiger
ans Anfang der Datei gesetzt und der Inhalt der Datei mit der Funktion fgets()
ausgelesen und angezeigt. Abschließend wird die Datei wieder mit fclose()
geschlossen.
Um ganze Dateien in PHP einlesen zu können, kann man auch die Funktion fread()
verwenden, wie folgendes kleines Beispiel deutlich macht.
<?php
// schreibt den kompletten Inhalt er Datei als
// String in die Variable $contents
// zu beachten ist das die Variable $filename
// nicht nur den Dateinamen sondern einen
// kompletten Pfad enthält. Dieser sollte bei
// kritischen Dateioperationen immer vom
// Stammverzeichnis aus angegeben sein.
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
Erklärung:
Mit der oben stehenden PHP-Funktion kann der komplette Inhalt einer Datei als String in
eine Variable $contents gelesen und gespeichert werden. Hierfür muss zunächst
in der Variable $filename der komplette Pfad zu der Datei angegeben werden. Es ist
darauf zu achten, dass der Pfad vom Stammverzeichnis aus angegeben wird, um kritische
Dateioperationen sicher ausführen zu können.
Anschließend wird mit fopen() die Datei geöffnet und der Inhalt der Datei mit
fread() in die Variable $contents gelesen und gespeichert. Zu beachten ist hierbei, dass
als zweiter Parameter die Größe der Datei angegeben werden muss, damit alle
Daten korrekt geladen werden.
Zuletzt wird die Datei mit fclose() geschlossen und der Inhalt der Datei kann nun in der
Variablen $contents verwendet werden.
weiter Die Funktion date()
in
PHP
|