いつストリーム ラッパーとソケットを使用する必要があるかわかりません。PHPでいつストリームラッパーとソケットを使用する必要があるか教えてもらえますか?
同じことについていくつか例を挙げてください。
いつストリーム ラッパーとソケットを使用する必要があるかわかりません。PHPでいつストリームラッパーとソケットを使用する必要があるか教えてもらえますか?
同じことについていくつか例を挙げてください。
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 応答を解析する方法を知る必要があります。
また、ソケット プログラミングに関する次のチュートリアルも役立つ場合があります。