• 如果喜欢本站,您可以按CTRL+D收藏本站,方便下次访问。

  • 欢迎来自五湖四海的朋友,期待为您分享有价值的资源 :oops:

PHP流处理(stream)

技术分享 第四度 3周前 (11-07) 90次浏览 0个评论 扫描二维码
文章目录[隐藏]

为什么要了解流

一个php程序的本质是读入数据,经过处理后,再输出数据。

graph LR
源数据 --输入--> 处理程序
处理程序 --输出--> 目标数据

php处理程序可以以多个方式读入数据。比如:从文件读入,从http数据源读取,从标准输入读取(php-cli界面要求用户输入数据),从客户端POST BODY读取,从FTP数据源读取……从不同的数据源读取数据可能会有不同的函数,不同的方法。同理,输出数据到不同的位置也会用不同函数,不同的方法。

graph LR
文件数据      --输入--> 处理程序
标准输入数据  --输入--> 处理程序
POST数据      --输入--> 处理程序
远程HTTP数据  --输入--> 处理程序
处理程序 --输出--> 目标文件
处理程序 --输出--> 标准输出
处理程序 --输出--> 浏览器网页
处理程序 --输出--> ......

另一方面,针对大规模数据,因计算机内存限制,不能一次性处理完,因此需要每次处理一段数据,即分片处理数据。

为了以统一的方式解决数据分片读入输出的问题,PHP提出了流(stream)这个概念。

  • 流让我们不用关心具体数据读写协议(即读写数据接口函数)
  • 流可以帮我们减少内存占用量
  • 流可以让我们写出的代码更容易维护

流是什么

流是什么?有人说,流类似于Linux中的管道pipe;有人说,流是对输入输出设备的抽象,也有人说,流是传输数据的一种方式。
但我认为,流实质上涉及到四个个概念:

  • 资源: 数据存放的位置,数据可能存放在本地磁盘,可能存放在远程服务器,可能存放在FTP服务器……
  • 流设备:数据传输的媒介(也就是通常说的流)
  • 流数据:在流设备上传输的数据,是分片数据
  • 处理程序:处理流数据的PHP程序

只有把这几个概念一起理解,才能明白什么是流。打个比方,一个工厂从原料基地,用卡车队从公路上,一趟一趟运输原料到工厂进行加工,并把加工好的产品,用卡车队从公路上,一趟一趟运到代理商仓库。在这里,公路就是流设备,公路上的卡车就是流数据,工厂就是流处理程序,产地的原料和在仓库的产品就是资源,原料到工厂的公路流是输入流,工厂到产品仓库的流是输出流。

回到PHP,流就是用统一的方式来处理可以分片的数据资源的工具.

PHP有哪些流

在PHP中,流可以用scheme://target 这种形式来表示。其中scheme是协议,target随协议不同而各异,下边是常的一些流:

  1. 文件流,也是默认流,用于读写文件。scheme是file(可以省略),target是文件的具体位置,如/etc/resolv.conf 等价于 file:///etc/resolve.conf
  2. http数据流,用于http访问数据资源,形式为通常的网址
  3. 标准输入流,用于读入用户输入数据,即php://input
  4. 标准输出流,用于输出数据到屏幕或者输出数据到html页面,即php://output
  5. 临时数据流,用于存储临时数据,即php://temp

如何对数据流进行操作

打开关闭流

$fp = fopen("test.txt", "rb"); // 只读方式打开一个文件流,用于读取数据
$fp = fopen("php://input", "rb"); // 只读方式打开一个标准输入流,用于从标准输入读取数据
$fp = fopen("php://temp", "rwb"); // 读写方式打开一个临时数据流,用于读写临时数据

fclose($fp); //关闭流

本网站采用BY-NC-SA 4.0协议进行授权 | 转载请注明原文链接:https://www.disidu.com/post/2003.html
如果觉得本文对您有帮助或者您心情好~可以微信打赏支持一下本站:↓↓↓
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址