pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

PHP流Streams、包裝器wrapper概念與用法實例詳解

這篇文章主要介紹了PHP流Streams、包裝器wrapper概念與用法,結合實例形式分析了php中流Streams與包裝器wrapper的基本概念及使用方法,需要的朋友可以參考下

本文實例講述了PHP流Streams、包裝器wrapper概念與用法。分享給大家供大家參考,具體如下:

流Streams這個概念是在php4.3引進的,是對流式數據的抽象,用于統一數據操作,比如文件數據、網絡數據、壓縮數據等,以使可以共享同一套函數,php的文件系統函數就是這樣的共享,比如file_get_contents()函數即可打開本地文件也可以訪問url就是這一體現。簡單點講,流就是表現出流式數據行為的資源對象。

以線性方式進行讀寫,并可以在流里面任意位置進行搜索。

流有點類似數據庫抽象層,在數據庫抽象層方面,不管使用何種數據庫,在抽象層之上都使用相同的方式操作數據,而流是對數據的抽象,它不管是本地文件還是遠程文件還是壓縮文件等等,只要來的是流式數據,那么操作方式就是一樣的。

有了流這個概念就引申出了包裝器wrapper這個概念,每個流都對應一種包裝器,流是從統一操作這個角度產生的一個概念,而包裝器呢是從理解流數據內容出發產生的一個概念,也就是這個統一的操作方式怎么操作或配置不同的內容;

這些內容都是以流的方式呈現,但內容規則是不一樣的,比如http協議傳來的數據是流的方式,但只有http包裝器才理解http協議傳來的數據的意思,可以這么理解,流就是一根流水的管子,只不過它流出的是數據,包裝器就是套在流這根管子外層的一個解釋者,它理解流出的數據的意思,并能操作它。

官方手冊說:“一個包裝器是告訴流怎么處理特殊協議或編碼的附加代碼”明白這句話的意思了嗎?

包裝器可以嵌套,一個流外面包裹了一個包裝器后,還可以在外層繼續包裹包裝器,這個時候里層的包裝器相對于外層的包裝器充當流的角色
在php自身底層實現的c語言開發文檔有這樣的解釋:

流API操作一對不同級別:在基本級別,api定義了php_stream對象表示流式數據源,在稍微高一點的級別,api定義了php_stream_wrapper對象。

它包裹低一級別的php_stream對象,以提供取回URL的內容和元數據、添加上下文參數的能力,調整包裝器行為;

每一種流打開后都可以應用任意數量的過濾器在上面,流數據會經過過濾器的處理,筆者認為過濾器這個詞用得有點不準確,有些誤導人。

從字面意思看好像是去掉一些數據的感覺,應該稱為數據調整器,因為它既可去掉一些數據,也可以添加,還可以修改,但歷史原因約定俗成,也就稱為過濾器了,大家心里明白就好。

我們經常看到下面的詞,來解釋下他們的區別:

資源和數據:資源是比較宏觀的說法,通常包含數據,而數據是比較具象的說法,在開發程序的時候經常說是數據,而在軟件規劃時說是資源,他們是近義詞,就像軟件設計和程序開發的區別一樣。

上下文和參數:上下文是比較宏觀的說法,經常用在溝通上面,具體點講就是一次溝通本身的參數,而參數這個說法往往用在比較具體的事情上面,比如說函數

上面解釋了概念性的東西,下面來看看具體內容:

php支持的協議和包裝器請看這里:http://php.net/manual/zh/wrappers.php:
(筆者注:原標題是:支持的協議和封裝協議,中文翻譯有點誤導,準確的講就是支持的協議和包裝器,從英文版面就很清楚)
默認的支持了一些協議和包裝器,請用stream_get_wrappers()函數查看.也可以自定義一個包裝器,用stream_wrapper_register()注冊
盡管RFC 3986里面可以使用:做分割符,但php只允許://,所以url請使用"scheme://target"這樣的格式

file:// — 訪問本地文件系統,在用文件系統函數時默認就使用該包裝器
http:// — 訪問 HTTP(s) 網址
ftp:// — 訪問 FTP(s) URLs
php:// — 訪問各個輸入/輸出流(I/O streams)
zlib:// — 壓縮流
data:// — 數據(RFC 2397)
glob:// — 查找匹配的文件路徑模式
phar:// — PHP 歸檔
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音頻流
expect:// — 處理交互式的流

如何實現一個自定義的包裝器:

在用fopen、fwrite、fread、fgets、feof、rewind、file_put_contents、file_get_contents等等文件系統函數操作流時,數據是先傳給定義的包裝器類對象,包裝器再去操作流。
如何實現一個自定義的流包裝器呢?php提供了一個類原型,只是原型而已,不是接口也不是類,不能用于繼承:

streamWrapper {
/* 屬性 */
public resource $context ;
/* 方法 */
__construct ( void )
__destruct ( void )
public bool dir_closedir ( void )
public bool dir_opendir ( string $path , int $options )
public string dir_readdir ( void )
public bool dir_rewinddir ( void )
public bool mkdir ( string $path , int $mode , int $options )
public bool rename ( string $path_from , string $path_to )
public bool rmdir ( string $path , int $options )
public resource stream_cast ( int $cast_as )
public void stream_close ( void )
public bool stream_eof ( void )
public bool stream_flush ( void )
public bool stream_lock ( int $operation )
public bool stream_metadata ( string $path , int $option , mixed $value )
public bool stream_open ( string $path , string $mode , int $options , string &$opened_path )
public string stream_read ( int $count )
public bool stream_seek ( int $offset , int $whence = SEEK_SET )
public bool stream_set_option ( int $option , int $arg1 , int $arg2 )
public array stream_stat ( void )
public int stream_tell ( void )
public bool stream_truncate ( int $new_size )
public int stream_write ( string $data )
public bool unlink ( string $path )
public array url_stat ( string $path , int $flags )
}

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP定義字符串的四種方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
下面小編就為大家分享一篇php 替換文章中的圖片路徑,下載圖片到本地服務器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP給源代碼加密的幾種方法匯總(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇php打開本地exe程序,js打開本地exe應用程序,并傳遞相關參數方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP類的反射來實現依賴注入過程以及相關知識點分享,對此有興趣的朋友跟著小編學習下吧。
php遍歷一個文件夾內的所有文件和文件夾,并刪除所有文件夾和子文件夾下的所有文件的代碼,通過遞歸方式實現達到清空一個目錄的效果。本文給大家分享實例代碼,需要的朋友參考
主站蜘蛛池模板: 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 湖南自考_湖南自学考试| 温州在线网| 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 鲸鱼视觉 -数字展厅多媒体互动展示制作公司 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 阻垢剂,反渗透阻垢剂,缓蚀阻垢剂-山东普尼奥水处理科技有限公司 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 顺辉瓷砖-大国品牌-中国顺辉 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 苏州同创电子有限公司 - 四探针测试仪源头厂家| 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 | 神马影院-实时更新秒播 | 德国进口电锅炉_商用电热水器_壁挂炉_电采暖器_电热锅炉[德国宝] | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 |