Zoeken…


Syntaxis

  • Elke stream heeft een schema en een doel:
  • <Schema>: // <target>

parameters

Parameternaam Beschrijving
Stroombron De gegevensaanbieder die bestaat uit de syntaxis <scheme>://<target>

Opmerkingen

Stromen zijn in wezen een overdracht van gegevens tussen een oorsprong en een bestemming, om Josh Lockhart te parafraseren in zijn boek Modern PHP.

De oorsprong en de bestemming kunnen zijn

  • een bestand
  • een opdrachtregelproces
  • een netwerkverbinding
  • een ZIP- of TAR-archief
  • tijdelijk geheugen
  • standaard invoer / uitvoer

of andere bronnen die beschikbaar zijn via PHP's stream wrappers .

Voorbeelden van beschikbare stream wrappers ( schemes ):

  • file: // - Toegang tot lokaal bestandssysteem
  • http: // - Toegang tot HTTP (s) URL's
  • ftp: // - Toegang tot FTP (s) URL's
  • php: // - Toegang tot verschillende I / O-streams
  • phar: // - PHP-archief
  • ssh2: // - Veilige shell 2
  • ogg: // - Audiostreams

Het schema (oorsprong) is de identificatie van de verpakking van de stream. Voor het bestandssysteem is dit bijvoorbeeld file:// . Het doel is de gegevensbron van de stream, bijvoorbeeld de bestandsnaam.

Een streamwrapper registreren

Een streamwikkelaar biedt een handler voor een of meer specifieke schema's.

Het onderstaande voorbeeld toont een eenvoudige streamwikkelaar die PATCH HTTP-verzoeken verzendt wanneer de stream wordt gesloten.

// 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);
    }
}

Dit voorbeeld toont slechts enkele voorbeelden van wat een generieke streamwrapper zou bevatten. Dit zijn niet alle beschikbare methoden. Een volledige lijst met methoden die kunnen worden geïmplementeerd, is te vinden op http://php.net/streamWrapper .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow