Strömungslehre im Netzwerk

PHP-Zertifizierung

7.10.2008 von Redaktion pcmagazin und Tobias Hauser

Dateien stehen im Mittelpunkt dieser Folge der Serie PHP-Zertifizierung. Eine wichtige Rolle spielt dabei die Kommunikation über das Netzwerk.

ca. 4:40 Min
Ratgeber
  1. PHP-Zertifizierung
  2. Teil 2: PHP-Zertifizierung
PHP Logo
PHP Logo
© Archiv

Dateien stehen im Mittelpunkt dieser Folge der Serie PHP-Zertifizierung. Eine wichtige Rolle spielt dabei die Kommunikation über das Netzwerk.

PHP bietet eine Menge an Funktionen zur Arbeit mit Dateien und dem Netzwerk. Hier müssen Sie zum einen natürlich die Funktionen selbst kennen. Zum anderen gibt es beispielsweise bei der Arbeit mit Dateien verschiedene Modi, die häufig abgefragt werden. Für die Arbeit über das Netzwerk müssen Sie die Grundlagen von Streams beherrschen.

Öffnen

Für die Arbeit mit Dateien gibt es drei Arten von Funktionen: die Standard-Methoden, die mit f beginnen, die, die mit file anfangen und die übrigen mit anderen Wortkombinationen. Die wichtigste Funktion der f-Gruppe ist fopen(Datei, Modus). Sie dient dazu, eine Datei zu öffnen, um Inhalte zu lesen oder zu schreiben. Dazu liefert fopen() einen Datei-Handle. Den Datentyp sehen Sie, wenn Sie den Handle ausgeben:

Für dieses und die folgenden Beispiele benötigen Sie eine Textdatei mit dem Namen datei.txt und beliebigem Inhalt. Welche Operationen mit der geöffneten Datei möglich sind, steuert der Modus, der als zweiter Parameter von fopen() angegeben wird. Folgende Möglichkeiten gibt es:

$handle = fopen('datei.txt', 'r');
var_dump($handle);

r öffnet die Datei zum Lesen und startet am Anfang der Datei. r+ öffnet sie zum Lesen und Schreiben. w öffnet die Datei ausschließlich zum Schreiben, beginnt am Anfang der Datei und ändert die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, versucht PHP sie anzulegen. w+ öffnet die Datei zum Lesen und Schreiben und beginnt am Anfang der Datei. Die Länge der Datei wird auf 0 Byte gesetzt. Wenn die Datei nicht existiert, versucht PHP sie anzulegen. a öffnet die Datei zum Schreiben und beginnt an deren Ende. Wenn die Datei nicht existiert, versucht PHP sie anzulegen. a+ öffnet die Datei zum Lesen und Schreiben. Beginnt am Ende der Datei. Wenn die Datei nicht existiert, versucht PHP sie anzulegen.

Für Dateien mit Binärdaten benötigen Sie unter Windows noch die Angabe b hinter dem Modus. Dies ist unter Linux unnötig. Der Pfad zur Datei kann absolut oder relativ sein. Unter Windows sollten Sie statt der Backslashes normale Schrägstriche verwenden, da diese auch unter Linux funktionieren.

Wenn fopen() scheitert, weil die Datei nicht vorhanden ist oder auch der Zugriff verweigert wird, erhalten Sie eine Warnmeldung und der Handle erhält als Wert false. Um vorab festzustellen, ob eine Datei im Da-teisystem existiert, können Sie die Prüffunktion file_exists(Datei) verwenden:

Wollen Sie wissen, ob eine Datei lesbar ist, bietet sich is_readable() an. Die Schreibbarkeit prüft is_writable(). Beide liefern einen Wahrheitswert als Rückgabe.

<?php
$datei = 'dateiX.txt';
if (file_exists($datei)) {
$handle = fopen($datei, 'r');
var_dump($handle); }
?>

Lesen

Zum Auslesen von Daten aus der Datei gibt es verschiedene Ansätze. Mit fread(Handler, Länge) lesen Sie eine als zweiten Parameter angegebene Menge an Bytes aus einer Datei aus. Das Auslesen beginnt dabei an der Position des Dateizeigers. fread() verschiebt diesen Dateizeiger dann jeweils um die Menge an Bytes. Dies können Sie nutzen, um die Inhalte auszulesen:

Mit feof() wird geprüft, ob das Dateiende erreicht ist. Wenn ja, wird das Lesen abgebrochen. htmlspecialchars() hilft, eine sichere Ausgabe zu haben.

$handle = fopen(
'datei.txt', 'r');
while (!feof($handle)) {
echo htmlspecialchars(fread($handle, 4096)); }
fclose($handle);

Das Auslesen klappt mit weniger Code, wenn der Zeiger am Anfang der Datei steht. Mit filesize() erhalten Sie die Dateigröße, die ebenfalls an fread() übergeben wird:

Neben fread() gibt es noch einige andere Lesefunktionen für Dateien: > fgetc() liest ein Zeichen > fgets() liest eine Zeile > fgetss() arbeitet wie fgets() und entfernt zusätzlich HTML-Tags > fgetcsv() liest eine Zeile im CSV-Format und gibt die Werte als Array zurück. Das Trennzeichen ist normalerweise ein Komma, kann aber als dritter Parameter auch gewählt werden.

echo htmlspecialchars(fread
($handle, filesize('datei.txt')));

Schreiben

Zum Schreiben von Dateien kommt die Funktion fwrite() oder fputs() zum Einsatz. Beide Funktionen sind identisch: fwrite() ist gebräuchlicher, fputs() ist ein Alias. fwrite(Handler, Inhalt) schreibt den Inhalt in die Datei, der als zweiter Parameter angegeben wird. Das Schreiben wird dabei an der Position begonnen, an der sich der Dateizeiger befindet. Der zweite Parameter ist der Inhalt, der in die Datei geschrieben wird. Hierbei handelt es sich um einen String. Als optionalen dritten Parameter geben Sie die Länge in Byte an, auf der die Daten maximal geschrieben werden.

Da Datei-Ressourcen im Hauptspeicher des Webservers abgelegt werden, sollten Sie sie schließen, wenn sie nicht mehr gebraucht werden. Hierfür wird die Funktion fclose(Handler) verwendet. Die Funktion liefert als Ergebnis einen Wahrheitswert.

$handle = fopen('datei.txt', 'a+');
fwrite($handle, '<br />Eine
hervorragende Zertifizierung');
fclose($handle);

Neben fwrite() und fputs() gibt es noch mehr Funktionen zum Schreiben in Dateien: fputcsv() legt einen Array im CSV-Format in einer Datei ab. fprintf() formatiert dagegen wie printf() einen String und schreibt ihn dann, statt ihn direkt auszugeben, in eine Datei, deren Handle als erster Parameter angegeben ist. Übrigens, bei der Parameterreihenfolge sind die Funktionen für Dateien konsistent, der Handle oder der Dateiname ist immer der erste Parameter.

Dateizeiger

Der Dateizeiger selbst, sprich die Position, ab der gelesen oder geschrieben wird, kann nicht nur beim Öffnen der Datei geändert werden, sondern lässt sich mit der Methode fseek(Handle, Position) jederzeit setzen. Die Position wird dabei in Byte angegeben. Hier ein Beispiel, das einen Text am Ende der Datei einfügt, dann an den Anfang springt und den gesamten Inhalt der Datei ausliest:

fseek() besitzt noch einen dritten optionalen Parameter. Damit bestimmen Sie, von wo die Byte-Angabe bei Position gedacht ist. SEEK_SET ist der Standardwert. Damit wird die Position direkt auf den Byte-Wert gesetzt. Mit SEEK_CUR wird der angegebene Byte-Wert zur aktuellen Position hinzugezählt. Mit SEEK_END springt die Funktion zum Ende der Datei und setzt ab da die zusätzlichen Bytes. Dies ergibt bei positiven Werten natürlich das Dateiende. Wenn Sie negative Werte verwenden, erhalten Sie dagegen eine Position in der Datei.

$handle = fopen('datei.txt', 'a+');
fwrite($handle, '<br />Eine
hervorragende Zertifizierung');
fseek($handle, 0);
echo fread($handle, filesize
('datei.txt'));
fclose($handle);

Wollen Sie die aktuelle Position in der Datei bestimmen, kommt ftell(Handle) zum Einsatz. Sie erhält als Parameter den Datei-Handle und liefert die Position in Byte.

Mehr lesen

Chronologische Liste und Netflix-Links

Marvel-Filme- und -Serien: Das ist die richtige Reihenfolge

Neuerscheinungen in der Übersicht

Netflix: Neue Filme und Serien

Vorschau auf Film- und Serien-Highlights

Amazon Prime Video: Neuheiten

Weiter zur Startseite  

Mehr zum Thema

internet, webdesign, adobe,  Illustrator, CS6

Webdesign

Webdesign in Adobe Illustrator CS6

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.

Facebook stellte die neue Suche

Facebook

Facebooks Social Graph Search

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?

Der BGH erklärt das Internet zur Lebensgrundlage.

Online-Recht

Darauf müssen Sie bei den AGB achten

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.

Online-Urheberrecht: Unser Ratgeber bietet Tipps für das Cloud-Recht.

Online-Recht in der Cloud

Wie sieht das Urheberrecht in der Wolke aus?

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…

Logistik im E-Commerce: Prozesse rund um die Logistik.

E-Commerce-Logistik

Logistik im E-Commerce

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.