PHP中的流是什么呢
流(streams)是PHP4.3版本引入的一個特性,主要是為了統一文件、sockets以及其他類似資源的工作方法。PHP4.3距今已經有很長時間了,但是很多程序員似乎都不能正確使用PHP中的流,當然這也包括我。以前也在一些程序中遇到過流的使用,如php://input,大家知道PHP中的流嗎?下面我們就給大家詳細介紹一下吧!
概述
流是由PHP提供的資源,可以供我們透明的使用,而且流是一個非常強大的工具。適當的在程序中使用流,可以將我們的程序帶到一個新的高度。
PHP手冊中對流的描述如下:
復制代碼 代碼如下:
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.
每一種流都實現了一個包裝器(wrapper),包裝器包含一些額外的代碼用來處理特殊的協議和編碼。PHP提供了一些內置的包裝器,我們也可以很輕松的創建和注冊自定義的包裝器。我們甚至可以使用上下文(contexts)和過濾器來改變和增強包裝器。
流基礎知識
PHP中流的形式如:://。是包裝器的名字,的內容取決于不同的包裝器語法。
默認的包裝器是file://,也就是說每次我們訪問文件系統的時候都使用了流。例如,我們可以使用如下兩種方式來讀取文件:readfile( /path/to/somefile.txt )和readfile( file:///path/to/somefile.txt ),使用這兩種方式讀取文件,可以得到相同的結果。
正如前面所說,PHP提供了一些內置的包裝器、協議和過濾器。查看我們的.機器上安裝了哪些包裝器,可以使用如下幾個函數:
復制代碼 代碼如下:
var_dump(stream_get_transports());
var_dump(stream_get_wrappers());
var_dump(stream_get_filters());
?
我本地的環境輸出內容如下:
復制代碼 代碼如下:
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包裝器對應默認的I/O資源。還有一個php://input流,它是一個只讀的流,流內容是post請求的數據。當我們將數據放在一個post請求的body體內用來請求一個遠程服務的時候,這個流特別好用。
因為php://input是最常用到的流,所以這里列出一些知識點:
復制代碼 代碼如下:
1.php://input可以讀取沒有處理過的POST數據。相較于$HTTP_RAW_POST_DATA而言,它給內存帶來的壓力較小,并且不需要特殊的php.ini設置。php://input不能用于enctype=multipart/form-data
2.僅當Content-Type為application/x-www-form-urlencoded且提交方法是POST方法時,$_POST數據與php://input數據才是”一致”(打上引號,表示它們格式不一致,內容一致)的。其它情況,它們都不一致
3.php://input讀取不到GET數據。是因為_GET數據作為query_path寫在http請求頭部(header)的PATH字段,而不是寫在http請求的body部分。
流上下文(Stream Contexts)
這部分內容在編程中幾乎沒有遇到過,本人研究起來也比較吃力,大家感興趣的話可以自行百度。
截止時間:2024-01-17 20:14:19
禮包內容:瓶蓋*600,潮流纖維*20
18
2024-01-16 來自湖南 推薦
: 來自河北
: 來自安徽
: 來自甘肅
18316
2024-01-16 來自湖南 推薦
: 來自河北
: 來自安徽
: 來自甘肅
593
2024-01-16 來自湖南 推薦
: 來自河北
: 來自安徽
: 來自甘肅
2
2024-01-16 來自湖南 推薦
: 來自河北
: 來自安徽
: 來自甘肅
45553
2024-01-16 來自湖南 推薦
: 來自河北
: 來自安徽
: 來自甘肅
25MB
查看7932MB
查看24MB
查看93457MB
查看
網友評論