包装器是附加代码,它告诉流如何处理特定协议/编码.例如,http包装器知道如何将URL转换为远程服务器上文件的HTTP/1.0请求.默认情况下,PHP中内置了许多包装器(请参阅支持的协议和包装器)
无论何时使用fopen或等函数打开URL,FTP连接等,都可以使用Stream包装器file_get_contents.流包装器的好处是您不需要了解协议(除非您编写自己的自定义包装器).
由于您通过常规文件函数Docs汇集了所有访问权限,因此您无需学习另一个有益的API.您可能已经使用过Stream Wrappers而没有注意到它,例如,当您这样做时
$pageContent = file_get_contents('http://example.com');
Run Code Online (Sandbox Code Playgroud)
你代码中的某个地方.Stream Wrapper的另一个好处是,您可以将过滤器放在前面,并以最小的努力修改流
$unzipped = file_get_contents('compress.zlib://http://example.com');
Run Code Online (Sandbox Code Playgroud)
将通过gzip解压缩从该网页运行内容.
套接字扩展实现了基于流行的BSD套接字的套接字通信功能的低级接口,提供了充当套接字服务器和客户端的可能性.
由于PHP提供了许多开箱即用的Stream Wrappers,并且几乎所有内容都有一个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);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,不是只调用URL而是让Stream Wrapper处理所有细节,您需要知道如何构造HTTP请求以及如何解析HTTP响应.
您可能还会发现本教程有关Socket Programming的帮助:
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |