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 .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow