最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP中的流(streams)淺析

 更新時間:2015年07月02日 08:48:38   投稿:junjie  
這篇文章主要介紹了PHP中的流(streams)淺析,本文講解了流的概述 、流基礎(chǔ)知識、php://包裝器、流上下文(Stream Contexts)等內(nèi)容,需要的朋友可以參考下

概述

流(streams)是PHP4.3版本引入的一個特性,主要是為了統(tǒng)一文件、sockets以及其他類似資源的工作方法。PHP4.3距今已經(jīng)有很長時間了,但是很多程序員似乎都不能正確使用PHP中的流,當(dāng)然這也包括我。以前也在一些程序中遇到過流的使用,如php://input,但是一直沒機(jī)會整理,今天就把這部分知識整理下。

流是由PHP提供的資源,可以供我們透明的使用,而且流是一個非常強(qiáng)大的工具。適當(dāng)?shù)脑诔绦蛑惺褂昧?,可以將我們的程序帶到一個新的高度。

PHP手冊中對流的描述如下:

復(fù)制代碼 代碼如下:

Streams were introduced with PHP 4.3.0 as a way of generalizing file, network, data compression, and other operations which share a common set of functions and uses. In its simplest definition, a stream is a resource object which exhibits streamable behavior. That is, it can be read from or written to in a linear fashion, and may be able to fseek() to an arbitrary locations within the stream.

每一種流都實(shí)現(xiàn)了一個包裝器(wrapper),包裝器包含一些額外的代碼用來處理特殊的協(xié)議和編碼。PHP提供了一些內(nèi)置的包裝器,我們也可以很輕松的創(chuàng)建和注冊自定義的包裝器。我們甚至可以使用上下文(contexts)和過濾器來改變和增強(qiáng)包裝器。

流基礎(chǔ)知識

PHP中流的形式如:<scheme>://<target>。<scheme>是包裝器的名字,<target>的內(nèi)容取決于不同的包裝器語法。
默認(rèn)的包裝器是file://,也就是說每次我們訪問文件系統(tǒng)的時候都使用了流。例如,我們可以使用如下兩種方式來讀取文件:readfile('/path/to/somefile.txt')和readfile('file:///path/to/somefile.txt'),使用這兩種方式讀取文件,可以得到相同的結(jié)果。

正如前面所說,PHP提供了一些內(nèi)置的包裝器、協(xié)議和過濾器。查看我們的機(jī)器上安裝了哪些包裝器,可以使用如下幾個函數(shù):

復(fù)制代碼 代碼如下:

<?php
    var_dump(stream_get_transports());
    var_dump(stream_get_wrappers());
    var_dump(stream_get_filters());
?>

我本地的環(huán)境輸出內(nèi)容如下:

復(fù)制代碼 代碼如下:

array (size=8)
  0 => string 'tcp' (length=3)
  1 => string 'udp' (length=3)
  2 => string 'unix' (length=4)
  3 => string 'udg' (length=3)
  4 => string 'ssl' (length=3)
  5 => string 'sslv3' (length=5)
  6 => string 'sslv2' (length=5)
  7 => string 'tls' (length=3)
array (size=12)
  0 => string 'https' (length=5)
  1 => string 'ftps' (length=4)
  2 => string 'compress.zlib' (length=13)
  3 => string 'compress.bzip2' (length=14)
  4 => string 'php' (length=3)
  5 => string 'file' (length=4)
  6 => string 'glob' (length=4)
  7 => string 'data' (length=4)
  8 => string 'http' (length=4)
  9 => string 'ftp' (length=3)
  10 => string 'phar' (length=4)
  11 => string 'zip' (length=3)
array (size=12)
  0 => string 'zlib.*' (length=6)
  1 => string 'bzip2.*' (length=7)
  2 => string 'convert.iconv.*' (length=15)
  3 => string 'string.rot13' (length=12)
  4 => string 'string.toupper' (length=14)
  5 => string 'string.tolower' (length=14)
  6 => string 'string.strip_tags' (length=17)
  7 => string 'convert.*' (length=9)
  8 => string 'consumed' (length=8)
  9 => string 'dechunk' (length=7)
  10 => string 'mcrypt.*' (length=8)
  11 => string 'mdecrypt.*' (length=10)

另外,我們可以自定義或者使用第三方的流。

php://包裝器

PHP有它自己的訪問輸入/輸出(I/O)流的包裝器。PHP有基本的php://stdin,php://stdout,php://stderr包裝器對應(yīng)默認(rèn)的I/O資源。還有一個php://input流,它是一個只讀的流,流內(nèi)容是post請求的數(shù)據(jù)。當(dāng)我們將數(shù)據(jù)放在一個post請求的body體內(nèi)用來請求一個遠(yuǎn)程服務(wù)的時候,這個流特別好用。

因?yàn)閜hp://input是最常用到的流,所以這里列出一些知識點(diǎn):

復(fù)制代碼 代碼如下:

1.php://input可以讀取沒有處理過的POST數(shù)據(jù)。相較于$HTTP_RAW_POST_DATA而言,它給內(nèi)存帶來的壓力較小,并且不需要特殊的php.ini設(shè)置。php://input不能用于enctype=multipart/form-data
2.僅當(dāng)Content-Type為application/x-www-form-urlencoded且提交方法是POST方法時,$_POST數(shù)據(jù)與php://input數(shù)據(jù)才是”一致”(打上引號,表示它們格式不一致,內(nèi)容一致)的。其它情況,它們都不一致
3.php://input讀取不到GET數(shù)據(jù)。是因?yàn)開GET數(shù)據(jù)作為query_path寫在http請求頭部(header)的PATH字段,而不是寫在http請求的body部分。

流上下文(Stream Contexts)

這部分內(nèi)容在編程中幾乎沒有遇到過,本人研究起來也比較吃力,大家感興趣的話可以自行百度。

總結(jié)

流在平時的編程中用到的并不是很多,在使用xml-rpc的時候,server端獲取client數(shù)據(jù),主要是通過php輸入流input,這是一種常用的場景。黑客在入侵網(wǎng)站的時候,也可能會用到這部分內(nèi)容。

相關(guān)文章

  • PHP類的自動加載機(jī)制實(shí)現(xiàn)方法分析

    PHP類的自動加載機(jī)制實(shí)現(xiàn)方法分析

    這篇文章主要介紹了PHP類的自動加載機(jī)制實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了__autoload方法進(jìn)行類自動加載操作的相關(guān)實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-01-01
  • Yii框架中jquery表單驗(yàn)證插件用法示例

    Yii框架中jquery表單驗(yàn)證插件用法示例

    這篇文章主要介紹了Yii框架中jquery表單驗(yàn)證插件用法,結(jié)合實(shí)例形式分析了Yii框架中使用jquery表單驗(yàn)證插件進(jìn)行手機(jī)、郵箱等輸入信息驗(yàn)證的相關(guān)操作技巧,需要的朋友可以參考下
    2016-10-10
  • Zend Framework創(chuàng)建自己的動作助手詳解

    Zend Framework創(chuàng)建自己的動作助手詳解

    這篇文章主要介紹了Zend Framework創(chuàng)建自己的動作助手實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了基于助手的抽象基類Zend_Controller_Action_Helper_Abstract實(shí)現(xiàn)自定義動作助手的相關(guān)技巧,需要的朋友可以參考下
    2016-03-03
  • Laravel學(xué)習(xí)教程之路由模塊

    Laravel學(xué)習(xí)教程之路由模塊

    這篇文章主要給大家介紹了Laravel學(xué)習(xí)教程之路由模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或使用laravel具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • php利用單例模式實(shí)現(xiàn)日志處理類庫

    php利用單例模式實(shí)現(xiàn)日志處理類庫

    該日志類利用單例模式,節(jié)省資源。自行判斷文件大小,超出指定大小則按序自行創(chuàng)建文件。
    2014-02-02
  • thinkphp5?操作redis?實(shí)現(xiàn)文章的熱度排行和點(diǎn)贊排行的示例

    thinkphp5?操作redis?實(shí)現(xiàn)文章的熱度排行和點(diǎn)贊排行的示例

    本文主要介紹了thinkphp5?操作redis?實(shí)現(xiàn)文章的熱度排行和點(diǎn)贊排行的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • php對微信支付回調(diào)處理的方法

    php對微信支付回調(diào)處理的方法

    這篇文章主要介紹了php對微信支付回調(diào)處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Zend Framework使用Zend_Loader組件動態(tài)加載文件和類用法詳解

    Zend Framework使用Zend_Loader組件動態(tài)加載文件和類用法詳解

    這篇文章主要介紹了Zend Framework使用Zend_Loader組件動態(tài)加載文件和類用法,結(jié)合實(shí)例形式分析了Zend_Loader組件實(shí)現(xiàn)文件自動加載與屬性判斷的相關(guān)使用技巧,需要的朋友可以參考下
    2016-12-12
  • Laravel中的Blade模板引擎示例詳解

    Laravel中的Blade模板引擎示例詳解

    laravel的模版引擎采用了blade模版引擎,下面這篇文章主要給大家介紹了關(guān)于Laravel中Blade模板引擎的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • php數(shù)組編碼轉(zhuǎn)換示例詳解

    php數(shù)組編碼轉(zhuǎn)換示例詳解

    需要達(dá)到的效果是GBK數(shù)組轉(zhuǎn)換成utf-8數(shù)組傳給json_encode函數(shù),下面使用詳細(xì)介紹轉(zhuǎn)換方法
    2014-03-03

最新評論

海城市| 安庆市| 手游| 边坝县| 烟台市| 都江堰市| 栖霞市| 定州市| 获嘉县| 黄浦区| 芜湖市| 香格里拉县| 获嘉县| 陆丰市| 木里| 清原| 大化| 沁水县| 永春县| 梧州市| 永登县| 天水市| 东台市| 商城县| 封丘县| 伊金霍洛旗| 台州市| 新巴尔虎左旗| 祁东县| 即墨市| 松江区| 石屏县| 余庆县| 湛江市| 泾源县| 陆川县| 探索| 望江县| 台东市| 德化县| 沐川县|