什么时候我们应该在PHP中使用流包装器和套接字?
我不明白什么时候应该使用流包装器和套接字。有人能告诉我什么时候应该在PHP中使用流包装器和套接字吗 请给我一些同样的例子。StreamWrappers 引用PHP手册,网址为: 包装器是告诉流如何处理特定协议/编码的附加代码。例如,http包装器知道如何将URL转换为远程服务器上文件的http/1.0请求。默认情况下,PHP中内置了许多包装器(请参阅) 无论何时打开URL、FTP连接等,您都可以使用流包装器,其功能包括什么时候我们应该在PHP中使用流包装器和套接字?,php,Php,我不明白什么时候应该使用流包装器和套接字。有人能告诉我什么时候应该在PHP中使用流包装器和套接字吗 请给我一些同样的例子。StreamWrappers 引用PHP手册,网址为: 包装器是告诉流如何处理特定协议/编码的附加代码。例如,http包装器知道如何将URL转换为远程服务器上文件的http/1.0请求。默认情况下,PHP中内置了许多包装器(请参阅) 无论何时打开URL、FTP连接等,您都可以使用流包装器,其功能包括fopen或file\u get\u contents。流包装器的好处是您不需
fopen
或file\u get\u contents
。流包装器的好处是您不需要对协议了解太多(除非您编写自己的自定义包装器)
由于您可以通过常规API进行所有访问,因此不需要学习另一种API,这是一种优势。例如,您可能已经在不知不觉中使用了流包装器
$pageContent = file_get_contents('http://example.com');
在代码的某个地方。流包装器的另一个好处是,您可以将过滤器放在前面,并以最小的工作量修改流
$unzipped = file_get_contents('compress.zlib://http://example.com');
将通过gzip解压缩运行该网页中的内容
插座
引用PHP手册,网址为:
套接字扩展基于流行的BSD套接字实现了套接字通信功能的低级接口,提供了充当套接字服务器和客户端的可能性
由于PHP提供了大量现成的流包装器,并且几乎所有内容都有一个API,所以很少有使用套接字的用例
当需要在协议级别实现以实现特定协议的客户端或服务器时,可以使用套接字。这通常需要对实现的协议有深入的了解,例如,要执行与上述示例中的file\u get\u contents
调用相同的操作,您需要执行(,您甚至需要执行更多实际操作)
$fp=fsockopen(“www.example.com”,80,$errno,$errstr,30);
如果(!$fp){
回显“$errstr($errno)
\n”;
}否则{
$out=“GET/HTTP/1.1\r\n”;
$out.=“主机:www.example.com\r\n”;
$out.=“连接:关闭\r\n\r\n”;
fwrite($fp,$out);
而(!feof($fp)){
echo fgets(fp,128美元);
}
fclose($fp);
}
正如您所看到的,您需要知道如何构造HTTP请求以及如何解析HTTP响应,而不是仅仅调用URL并让流包装器处理所有细节
您可能还会发现本关于套接字编程的教程很有帮助:
$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);
}