サーチ…
構文
- すべてのストリームにスキームとターゲットがあります。
- <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