PHP
Streams
Suche…
Syntax
- Jeder Stream hat ein Schema und ein Ziel:
- <Schema>: // <Ziel>
Parameter
Parametername | Beschreibung |
---|---|
Stream-Ressource | Der Datenprovider, bestehend aus der Syntax <scheme>://<target> |
Bemerkungen
Streams sind im Wesentlichen eine Übertragung von Daten zwischen einem Ursprung und einem Ziel, um Josh Lockhart in seinem Buch Modern PHP zu umschreiben.
Der Ursprung und das Ziel können sein
- eine Datei
- ein Befehlszeilenprozess
- eine Netzwerkverbindung
- ein ZIP- oder TAR-Archiv
- temporärer Speicher
- Standardein- / ausgabe
oder jede andere über PHP-Stream-Wrapper verfügbare Ressource.
Beispiele für verfügbare Stream-Wrapper ( schemes
):
- file: // - Zugriff auf lokales Dateisystem
- http: // - Zugriff auf HTTP-URLs
- ftp: // - Zugriff auf FTP-URLs
- php: // - Zugriff auf verschiedene E / A-Streams
- phar: // - PHP-Archiv
- ssh2: // - Secure Shell 2
- ogg: // - Audiostreams
Das Schema (Ursprung) ist der Bezeichner des Wrappers des Streams. Für das Dateisystem ist dies zum Beispiel file://
. Das Ziel ist die Datenquelle des Streams, beispielsweise der Dateiname.
Registrieren eines Stream-Wrappers
Ein Stream-Wrapper stellt einen Handler für ein oder mehrere spezifische Schemata bereit.
Das folgende Beispiel zeigt einen einfachen Stream-Wrapper, der PATCH
HTTP-Anforderungen sendet, wenn der Stream geschlossen wird.
// register the FooWrapper class as a wrapper for foo:// URLs.
stream_wrapper_register("foo", FooWrapper::class, STREAM_IS_URL) or die("Duplicate stream wrapper registered");
class FooWrapper {
// this will be modified by PHP to show the context passed in the current call.
public $context;
// this is used in this example internally to store the URL
private $url;
// when fopen() with a protocol for this wrapper is called, this method can be implemented to store data like the host.
public function stream_open(string $path, string $mode, int $options, string &$openedPath) : bool {
$url = parse_url($path);
if($url === false) return false;
$this->url = $url["host"] . "/" . $url["path"];
return true;
}
// handles calls to fwrite() on this stream
public function stream_write(string $data) : int {
$this->buffer .= $data;
return strlen($data);
}
// handles calls to fclose() on this stream
public function stream_close() {
$curl = curl_init("http://" . $this->url);
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->buffer);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_exec($curl);
curl_close($curl);
$this->buffer = "";
}
// fallback exception handler if an unsupported operation is attempted.
// this is not necessary.
public function __call($name, $args) {
throw new \RuntimeException("This wrapper does not support $name");
}
// this is called when unlink("foo://something-else") is called.
public function unlink(string $path) {
$url = parse_url($path);
$curl = curl_init("http://" . $url["host"] . "/" . $url["path"]);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_exec($curl);
curl_close($curl);
}
}
Dieses Beispiel zeigt nur einige Beispiele, was ein generischer Stream-Wrapper enthalten würde. Dies sind nicht alle verfügbaren Methoden. Eine vollständige Liste der Methoden, die implementiert werden können, finden Sie unter http://php.net/streamWrapper .