PHP
Strömmar
Sök…
Syntax
- Varje ström har ett schema och ett mål:
- <Schema>: // <mål>
parametrar
Parameternamn | Beskrivning |
---|---|
Strömresurs | Dataleverantören som består av <scheme>://<target> -syntaxen |
Anmärkningar
Strömmar är i huvudsak en överföring av data mellan ett ursprung och en destination, för att parafrasera Josh Lockhart i sin bok Modern PHP.
Ursprunget och destinationen kan vara
- en fil
- en kommandoradsprocess
- en nätverksanslutning
- ett ZIP- eller TAR-arkiv
- tillfälligt minne
- standard ingång / utgång
eller någon annan resurs tillgänglig via PHP: s strömbrytare .
Exempel på tillgängliga strömförpackningar ( schemes
):
- fil: // - Åtkomst till lokalt filsystem
- http: // - Få åtkomst till HTTP (er) URL: er
- ftp: // - Få åtkomst till FTP (er) URL: er
- php: // - Få åtkomst till olika I / O-strömmar
- phar: // - PHP Archive
- ssh2: // - Secure Shell 2
- ogg: // - Ljudströmmar
Schemat (ursprung) är identifieraren för strömmens omslag. Till exempel för filsystemet är detta file://
. Målet är strömmens datakälla, till exempel filnamnet.
Registrerar en strömbrytare
En strömbrytare tillhandahåller en hanterare för ett eller flera specifika scheman.
Exemplet nedan visar en enkel strömbrytare som skickar PATCH
HTTP-förfrågningar när strömmen är stängd.
// 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);
}
}
Detta exempel visar bara några exempel på vad en generisk strömbrytare skulle innehålla. Dessa är inte alla tillgängliga metoder. En fullständig lista över metoder som kan implementeras finns på http://php.net/streamWrapper .