Strömungslehre im Netzwerk

PHP-Zertifizierung

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

  1. PHP-Zertifizierung
  2. Teil 2: PHP-Zertifizierung
PHP Logo

© Archiv

PHP Logo

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 zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".