时间:2020-8-9来源:本站原创作者:佚名

在现代php特性中,流或许是最出色但使用率最低的。虽然PHP4.3就引入了流,但是很多开发者并不知道流的存在,因为人们很少提及流,而且流的文档也很匮乏。PHP官方文档对流的解释如下:

流的作用是提供统一的公共函数来处理文件、网络和数据压缩等操作。简单而言,流是具有流式行为的资源对象,也就是说,流可以线性读写,并且可以通过fseek()之类的函数定位到流中的任何位置。

可能看完这段解释后还是云里雾里,我们简化一下,流的作用是在出发地和目的地之间传输数据。出发地和目的地可以是文件、命令行进程、网络连接、ZIP或TAR压缩文件、临时内存、标准输入或输出,或者是通过PHP流封装协议实现的任何其他资源。

如果你读写过文件,就用过流;如果你从php://stdin读取过数据,或者把输入写入php://stdout,也用过流。流为PHP的很多IO函数提供了底层实现,如file_get_contents、fopn、fread和fwrite等。PHP的流函数提供了不同资源的统一接口。

我们可以把流比作管道,把水(资源数据)从一个地方引到另一个地方。在水从出发地到目的地的过程中,我们可以过滤水,可以改变水质,可以添加水,也可以排出水。

流封装协议

流式数据的种类各异,每种类型需要独特的协议,以便读写数据,我们称这些协议为流封装协议。例如,我们可以读写文件系统,可以通过HTTP、HTTPS或SSH与远程Web服务器通信,还可以打开并读写ZIP、RAR或PHAR压缩文件。这些通信方式都包含下述相同的过程:

开始通信

读取数据

写入数据

结束通信

虽然过程是一样的,但是读写文件系统中文件的方式与收发HTTP消息的方式有所不同,流封装协议的作用是使用通用的接口封装这种差异。

每个流都有一个协议和一个目标。指定协议和目标的方法是使用流标识符:scheme://target,其中scheme是流的封装协议,target是流的数据源。


转载请注明原文网址:http://www.coolofsoul.com/phpys/19910.html

------分隔线----------------------------