Streams

Nicht nur Dateien lassen sich Lesen und Schreiben und mit fseek() die aktuelle Position in der Datei verändern, sondern dies gilt für eine ganze Reihe von Ressourcen. PHP führt die Streaming-API ein und erweitert die Dateioperationen, um den Programmieren einen einfachen Zugriff auf die unterschiedlichen Ressourcen zu geben. Ein Stream wird angesteuert, indem statt des Verzeichnispfades zu einer Datei eine Wrapperkennung zur Anwahl einer bestimmten Art von Stream übergeben wird. Nach dem Wrapper wird der Ort des Streams angegeben. Folgende Wrapper werden in PHP mitgeliefert:

  • file://: Dies ist der Wrapper für Dateien, der dann genutzt wird, wenn kein Wrappername angegeben wird. Es wird auf Dateien zugegriffen.
  • http://: Hiermit lassen sich HTTP-Anfragen stellen. Die geladenen Informationen können dann wie eine Datei genutzt werden.
  • https://: Ebenso ist ein Zugriff auf das HTTPS-Protokoll möglich.
  • ftp://: Auch FTP-Server können befragt werden.
  • ftps://: Verschlüsseltes FTP ist ebenso möglich.
  • php://: Mit diesem Wrapper können die sprachinternen Streams angesprochen werden
    • php://stdin: für die Eingabe,
    • php://stdout: für die Ausgabe, welche meist der Content ist, der an den Client verschickt wird,
    • php://stderr: für die Fehlerausgabe,
    • php://input: für den kompletten Roh-Body des POST-Requests,
    • php://memory: stellt eine Datei dar, die nur im Hauptspeicher existiert und deren Zugriff deshalb sehr schnell ist, und
    • php://temp: stellt eine temporäre Datei im darunterliegenden System dar. Dabei wird zunächst im Hauptspeicher operiert. Wenn das Volumen zu groß wird, wird auf das Dateisystem ausgewichen.
    • php://filter: stellt einen Filter dar, der den darunterliegenden Stream ändert.

Folgendes Programm gibt den Quelltext einer externen Webseite zurück:

Folgendes Programm benutzt einen Filter, um den Quelltext der Webseite in Großbuchstaben darzustellen:

Mit stream_filter_append() könnte nun ein weiterer Filter zu dem Stream hinzugefügt werden. Als ersten Parameter erhält diese Funktion den offenen Stream und als zweiten den Filternamen. Mit Hilfe der Funktion stream_get_meta_data() lassen sich Metadaten eines Streams über seinen aktuellen Zustand abrufen.

Mit Hilfe der Funktion stream_wrapper_register() lässt sich ein eigener Wrapper deklarieren. Dabei wird der Funktion als erster Parameter der Wrappername übergeben, unter dem er aufrufbar sein soll. Als zweiter Parameter erwartet die Funktion einen Klassennamen, der die unterschiedlichen Funktionen beinhaltet, die aufgerufen werden, sobald die einzelnen Funktionen, die auf dem Stream aufgerufen werden können, zur Ausführung kommen.

Mit Hilfe der Funktion stream_filter_register() lässt sich ein eigener Filter deklarieren. Übergeben wird dieser Funktion wieder ein Name für den Filter und ein Klassenname, der Funktionen für den Filter definiert. Diese Filter-Klasse muss die Funktion filter() deklarieren, die Ein- und Ausgabe übergeben bekommt. Zusätzlich dazu findet noch eine Übergabe der aktuellen Position und ob der Filter gerade geschlossen wird statt.

PHP unterstützt für Streams das Konzept von Kontexten. Ein Kontext kann mit Hilfe der Funktion stream_context_create() erstellt werden. Als Parameter wird dieser Methode ein Optionenarray und ein Parameterarray übergeben. Somit lassen sich Informationen, die ein Wrapper nutzt, in einem Kontext ablegen und auch Informationen, die bei der Nutzung des Wrappers entstehen, aus dem Kontext wieder entnehmen. Diese zusätzlichen Informationen können beispielsweise Headerdaten sein, die der HTTP-Wrapper nutzt und bereitstellt. Kontexte werden vielen Methoden zur Dateiverarbeitung mit übergeben. Somit kann ein Kontext eines Streams laufend gewechselt werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert