介绍
流作用是使用统一的方式处理文件,网络和数据压缩等共用同一套函数和方法的操作.简单而言,流是具有流式行为的资源对象.因此,流可以线性读写,或许还能使用fseek()函数定位到流中的任何位置.-----PHP手册
流的作用是在出发地和目的地之间传输数据.出发地和目的地可以是文件,命令行进程,网络连接,zip或tar压缩文件,临时内存,标准输入或输出,或者是通过PHP流封装协议实现的任何其他资源----Modern PHP
流封装协议
流式数据的种类各异,每种类型需要独特的协议,以便读写数据.
总体通信流程是:
1.开始通信
2.读取数据
3.写入数据
4.结束通信
每个流都有一个协议和一个目标.指定协议和目标的方法是使用流标识符.格式:<scheme>://<target>
<scheme>是流的封装协议 <target>是流的数据源
案例:
file_get_contents('http://www.baidu.com');
其中http://www.baidu.com就是一个流标识符.http协议会让PHP使用HTTP流封装协议,http之后是流的目标.流的目标之所以看起来像是普通的网页url,是因为HTTP流封装协议就是这样规定的.
file://流封装协议
我们在使用file_get_content(),fopen(),fwrite(),fclose()等读写文件系统.PHP默认使用的file://流封装协议,所以
php://流封装协议
php://stdin----这是个只读PHP流,其中的数据来自标准输入.例如,php脚本可以使用这个流接收命令行传入的脚本信息
php-cli模式下(我这是yaf形式的cli)php://stdout----这个流的作用是把数据写入当前的输出缓冲区.这个流只能写,无法读或寻址.
同样在cli模式下得到结果是:Hello World!7777888
php://memory----这个php流的作用是从系统内存中读取数据,或者把数据写入系统内存.这个php流的缺点是可用的内存是有限的.使用php://tmp流更安全
cli的结果是 string(7) "7777888" bool(false)
php://tmp---类似于php://memory,不同的是没有可用的内存的时候,会把数据写入临时文件中
流上下文
有些php流能接受一些参数,这些参数就是流上下文,用于定制流的行为,流上下文使用stream_context_create()创建
流上下文是个关联数组,最外层的如:http,是流封装协议的名称,他的值就是对应的协议
参考
Modern PHP
网友评论