3

いつストリーム ラッパーとソケットを使用する必要があるかわかりません。PHPでいつストリームラッパーとソケットを使用する必要があるか教えてもらえますか?

同じことについていくつか例を挙げてください。

4

1 に答える 1

7

ストリームラッパー

Streams: Introductionで PHP マニュアルを引用する:

ラッパーは、特定のプロトコル/エンコーディングの処理方法をスト​​リームに伝える追加のコードです。たとえば、http ラッパーは、URL をリモート サーバー上のファイルに対する HTTP/1.0 要求に変換する方法を認識しています。PHP にはデフォルトで多くのラッパーが組み込まれています (「サポートされているプロトコルとラッパー」を参照) 。

fopenやのような関数で URL や FTP 接続などを開くときはいつでも Stream ラッパーを使用しますfile_get_contents。ストリーム ラッパーには、プロトコルについて詳しく知る必要がないという利点があります (独自のカスタム ラッパーを作成しない限り)。

通常のファイル関数Docsを介してすべてのアクセスをファネルするため、利点である別の API を学習する必要はありません。たとえば、使用したときに、気付かないうちに既に Stream Wrappers を使用している可能性があります。

$pageContent = file_get_contents('http://example.com');

コードのどこかに。Stream Wrapper のもう 1 つの利点は、フィルターを前に置いて、最小限の労力でストリームを変更できることです。たとえば、

$unzipped = file_get_contents('compress.zlib://http://example.com');

gzip 解凍により、その Web ページのコンテンツを実行します。

ソケット

Sockets: Introductionで PHP マニュアルを引用する:

ソケット拡張機能は、一般的な BSD ソケットに基づくソケット通信機能への低レベル インターフェイスを実装し、ソケット サーバーおよびクライアントとして機能する可能性を提供します。

PHP はすぐに使用できる多数の Stream Wrapper を提供し、ほとんどすべての API も備えているため、ソケットを使用するユース ケースはほとんどありません。

特定のプロトコルのクライアントまたはサーバーを実装するためにプロトコル レベルで実装する必要がある場合は、ソケットを使用します。file_get_contentsこれには通常、実装されたプロトコルの詳細な知識が必要です。たとえば、上記の例の呼び出しと同じことを行うには、実行する必要があります (マニュアルから引用された例、実際にはさらに多くのことを行う必要があります)。

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

ご覧のとおり、単に URL を呼び出して Stream Wrapper にすべての重要な詳細を処理させるのではなく、HTTP 要求を作成する方法と HTTP 応答を解析する方法を知る必要があります。

また、ソケット プログラミングに関する次のチュートリアルも役立つ場合があります。

于 2012-06-27T08:49:40.097 に答える