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.
- PHP-Zertifizierung
- Teil 2: PHP-Zertifizierung

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.
Gutscheine
-
HelloFresh
Bis zu 120€ + GRATIS Versand der 1. Box mit den HelloFresh Rabattcodes Zum Gutschein
bis 31.01.2024+ bis zu 4,00€ Cashback -
Cyberport
25€ EXTRA Cyberport Gutschein im Technik-Sale Zum Gutschein
bis 27.09.2023+ bis zu 0,5% Cashback -
C&A Gutscheine und Angebote
C&A Gutschein: 10% extra Rabatt auf alle Oberteile Zum Gutschein
bis 27.09.2023+ bis zu 3,5% Cashback -
Calzedonia
20% Calzedonia Rabattcode erhalten Zum Gutschein
bis 31.12.2037+ bis zu 4,0% Cashback -
EDEKA smart
EDEKA smart Gutschein: GRATIS Artikel exklusiv als Kunde Zum Gutschein
bis 31.12.2037+ bis zu 13,00€ Cashback(statt11,00€) -
Geero
EXKLUSIVER Gutschein: 6% auf alle Geero2 E Bike Modelle Zum Gutschein
bis 27.09.2023