PHP中流的理解
admin
2024-01-30 04:03:32
0

流的作用是在出发地和目的地之间传输数据。出发地和目的地可以是文件、命令行进程、网络连接、ZIP或TAR压缩文件、临时内存、标准输入或输出,或是通过PHP流封装协议实现的任何其它资源。

定义

流的作用是使用统一的方式处理文件、网络和数据压缩等共用同一套函数和用法的操作。简单而言,流是具有流式行为的资源对象。因此,流可以线性读写、或许还能使用fseek()函数定位到流中的任何位置 --PHP手册。

下面我们简化一下,以便理解,流的作用是在出发地和目的地之间传输数据。出发地和目的地可以是文件、命令行进程、网络连接、ZIP或TAR压缩文件、临时内存、标准输入或输出,或是通过PHP流封装协议实现的任何其它资源。

流封装协议

流式数据的种类各异,每种类型需要独特的协议,以便读写数据。我们称这些协议为流封装协议。流封装协议的作用是使用通用的接口封装不同通信方式间的差异。每个流都有一个协议和一个目标。格式如下:

:// 

其中是流的封装协议,是流的数据源。

示例:使用HTTP流封装协议与Flickr API通信

file_get_contents()函数的字符串参数其实是一个流标识符。http协议会让PHP使用HTTP流封装协议。在这个参数中,http之后是流的目标。流的目标之所以看起来像是普通的网页URL,是因为HTTP流封装协议就是这样规定的。其它流封装协议可能不是这样。(普通的URL其实就是PHP流封装协议标识符的伪装)。

file://流封装协议

我们使用file_get_contents()、fopen()、fwrite()和fclose()函数读写文件系统,因为PHP默认使用的流封装协议是file://,所以我们很少认为这些函数使用的是PHP流。我们在不经意间就使用流PHP流!

示例:隐式使用file://流封装协议

下面这个示例的作用一样,不过这一次我们在流标识符中明确指定流file://流封装协议

示例:显式的使用file://流封装协议

我们通常会是省略file://封装协议,因为这是PHP使用的默认值。

php://流封装协议

这个流封装协议但作用是与PHP脚本的标准输入、标准输出和标准错误文件描述符通信。我们可以使用PHP提供的文件系统函数打开、读取或写入下述四个流:

php://stdin 

这个是只读PHP流,其中的数据来自标准输入。例如,PHP脚本可以使用这个流接收命令行传入的脚本的信息。

php://stdout 

这个PHP流的作用是把数据写入当前的输出缓冲区。这个流只能写,无法读或寻址。

php://memory 

这个PHP流的作用是从系统内存中读取数据,或者把数据写入系统内存。这个PHP流的缺点是,可用内存是有限的,使用php://temp流更安全。

php://temp 

这个PHP流的作用和php://memory类似,不过,没有可用内存时,PHP会把数据写入临时文件。

其它流封装协议

PHP和PHP扩展还提供流很多其他流封装协议,例如,与ZIP和TAR压缩文件、FTP服务器、数据压缩库等通信的流封装协议。

流上下文

有些PHP流能接收一系列可选的参数,这些参数叫流上下文,用于定制流的行为。流上下文使用stream_context_create()函数创建。这个函数返回的上下文对象可以传入大多数文件系统和流函数。

示例:流上下文(使用file_get_contents()函数发送HTTP POST请求)

 array( 'method' => 'POST', 'header' => "Content-Type: application/json;charset=utf-8;\r\n" . "Content-Length: " . mb_strlen($requestBody), 'content' => $requestBody ) 
)); 
$response = file_get_contents('https://my-api.com/users', false, $context);  

流过滤器

PHP真正强大的地方在于过滤、转换、添加或删除流中传输的数据。

 

相关内容

热门资讯

怎么取消安卓系统提醒,教你如何... 手机里的安卓系统提醒功能有时候真是让人头疼,不是这个APP要更新,就是那个APP推送了新消息,简直让...
安卓 录系统的声音,捕捉生活点... 你知道吗?手机里那些小小的声音,有时候比屏幕上的文字更能触动人心呢!今天,咱们就来聊聊安卓系统里那些...
安卓系统查看所有应用,全面解析... 你有没有想过,你的安卓手机里藏着多少秘密?那些你经常用的、偶尔用的,甚至是忘了用的应用,它们都藏在手...
原生安卓7.0系统评测,性能与... 亲爱的读者们,你是否对手机系统有着浓厚的兴趣?是否好奇过原生安卓7.0系统究竟有何魅力?今天,就让我...
宝马改安卓系统好吗,体验新境界 你有没有想过,把你的宝马车改个安卓系统,是不是就像给手机换了个新皮肤,瞬间感觉不一样了呢?今天,我们...
安卓系统手机单机游戏,安卓手机... 你有没有发现,最近你的安卓系统手机里是不是又多了一款单机游戏?没错,单机游戏在安卓系统手机上可是越来...
现在安卓系统会卡么,探究原因与... 你有没有发现,现在用安卓手机的时候,有时候会突然感觉有点卡呢?是不是你也遇到了这种情况,心里直犯嘀咕...
苹果颜值安卓系统,探索跨界融合... 你有没有发现,现在手机市场上有两种截然不同的风格在较量呢?一边是苹果,那可是时尚界的宠儿,颜值爆表;...
适合htpc的安卓系统,精选适... 你有没有想过,家里的电视盒子或者电脑,要是能装上安卓系统,那得多方便啊!想象你可以在上面玩各种游戏,...
安卓如何检测系统广播,Andr... 你有没有想过,你的安卓手机里那些神奇的“广播”是怎么工作的呢?没错,就是那些悄无声息地在你手机后台运...
安卓系统怎么刷recovery... 你有没有想过,你的安卓手机突然间变得有点儿不听话了?别急,别急,我来告诉你怎么刷recovery,让...
不用安卓和苹果系统,多元化移动... 你有没有想过,在这个科技飞速发展的时代,我们竟然可以不用安卓和苹果系统,也能畅游网络世界呢?没错,今...
安卓系统忘记网络设置,安卓系统... 亲爱的安卓用户们,你是否曾经遇到过这样的烦恼:手机连接网络时,突然忘记了网络设置,各种网络连接问题层...
安卓系统无法自己升级,自主升级... 你是不是也遇到了这个问题?安卓系统怎么就突然不升级了呢?别急,今天就来给你好好捋一捋这个让人头疼的小...
华为变成原生安卓系统,原生安卓... 你知道吗?最近科技圈可是炸开了锅,华为的大动作让所有人都瞪大了眼睛。没错,就是那个我们熟悉的华为,竟...
安卓系统手机很便宜,高性价比的... 你有没有发现,最近逛手机市场,安卓系统手机的价格真是让人惊喜不已呢!没错,就是那种我们平时用的最多的...
原生的安卓系统 索尼,深度解析... 你知道吗?在智能手机的世界里,有一个品牌总是以其独特的魅力和精湛的工艺吸引着众多科技爱好者。那就是索...
安卓系统更新历史,从初代到最新... 你有没有发现,你的安卓手机每次更新后都变得焕然一新?没错,这就是安卓系统更新带来的魔力!今天,就让我...
安卓系统的第二套系统,创新与变... 你知道吗?在科技飞速发展的今天,安卓系统已经成为了智能手机市场上的霸主。但是,你知道吗?安卓系统其实...
全军出击安卓系统版本,战力再攀... 你有没有发现,最近全军出击这款游戏在安卓系统上的版本更新可是越来越频繁了呢?这不,我就来给你好好扒一...