サーチ…


構文

  • すべてのストリームにスキームとターゲットがあります。
  • <scheme>:// <target>

パラメーター

パラメータ名説明
ストリームリソース <scheme>://<target>構文で構成されるデータプロバイダ

備考

ストリームは本質的に起源と目的地との間のデータの転送であり、Josh Lockhartの言い換えの本「Modern PHP」を訳しています。

出発地と目的地は

  • ファイル
  • コマンドラインプロセス
  • ネットワーク接続
  • ZIPアーカイブまたはTARアーカイブ
  • 一時メモリ
  • 標準入出力

PHPのストリームラッパーを介して利用可能なその他のリソース

利用可能なストリームラッパー( schemes )の例:

  • file:// - ローカルファイルシステムへのアクセス
  • http:// - HTTP(s)URLへのアクセス
  • ftp:// - FTP URLにアクセスする
  • php:// - さまざまなI / Oストリームにアクセスする
  • phar:// - PHPアーカイブ
  • ssh2:// - セキュアシェル2
  • ogg:// - オーディオストリーム

スキーム(origin)は、ストリームのラッパーの識別子です。たとえば、ファイルシステムの場合、これはfile://です。ターゲットはストリームのデータソースです(ファイル名など)。

ストリームラッパーの登録

ストリームラッパーは、1つ以上の特定のスキームのハンドラーを提供します。

次の例は、ストリームが閉じられたときにPATCH HTTP要求を送信する簡単なストリームラッパーを示しています。

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

この例は、一般的なストリームラッパーに含まれるもののいくつかの例を示しています。これらは利用可能なすべての方法ではありません。実装できるメソッドの完全なリストはhttp://php.net/streamWrapperにあります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow