摘要:例引用了文件描述符允許讀寫臨時數據。注意丟失了第一個數據包輸出使用過濾器在使用,,之類的函數使,可以使用過濾器應用在打開的上寫入時用函數處理所有的流數據也可以使用下面的方式設置上下文我們模擬了一個包查看的會顯示結果
以下內容整理添加自:
Understanding Streams in PHP
基礎使用
比如使用 file:// 協議來訪問文件系統
readfile("/path/to/somefile.txt") readfile("file:///path/to/somefile.txt") //兩者是等價的
查看本地PHP內置支持的協議和封裝協議,使用
print_r(stream_get_wrappers());
返回
Array ( [0] => https [1] => ftps [2] => compress.zlib [3] => compress.bzip2 [4] => php [5] => file [6] => glob [7] => data [8] => http [9] => ftp [10] => zip [11] => phar )
獲取本地的socket支持情況和過濾器(用法在后面)支持情況使用
print_r(stream_get_transports()); print_r(stream_get_filters());
將會返回
Array ( [0] => tcp [1] => udp [2] => unix [3] => udg [4] => ssl [5] => sslv3 [6] => sslv2 [7] => tls ) //transports Array ( [0] => zlib.* [1] => bzip2.* [2] => convert.iconv.* [3] => string.rot13 [4] => string.toupper [5] => string.tolower [6] => string.strip_tags [7] => convert.* [8] => consumed [9] => dechunk [10] => mcrypt.* [11] => mdecrypt.* ) //filters
除此之外還有很多第三方庫可以選擇:
Amazon S3
MS Excel
Google Storage
Dropbox
PHP://Wrapper 是PHP自己的I/O流訪問的封裝
包括
- php://stdin
- 訪問PHP進程相應的輸入流,比如用在獲取cli執行腳本時的鍵盤輸入
- php://stdout
- 訪問PHP進程相應的輸出流
- php://stderr
- 訪問PHP進程相應的錯誤輸出
- php://input
- 訪問請求的原始數據的只讀流
- php://output
- 只寫的數據流,以 print 和 echo 一樣的方式寫入到輸出區
- php://fd
- 允許直接訪問指定的文件描述符。例 php://fd/3 引用了文件描述符 3
- php://memory
- 允許讀寫臨時數據。 把數據儲存在內存中
- php://temp
- 同上,會在內存量達到預定義的限制后(默認是 2MB)存入臨時文件中
- php://filter
- 過濾器
php://stdin 是只讀的, php://stdout 和 php://stderr 是只寫的。
直接上例子:
1 php://input
//終端輸入 curl -d "Hello World" -d "foo=bar&name=John" http://localhost/dev/streams/php_input.php //print_r($_POST)輸出。注意丟失了第一個數據包 Array ( [foo] => bar [name] => John ) //php://input輸出 Hello World&foo=bar&name=John
2 使用過濾器
//在使用 readfile(),file_get_contents(),stream_get_contents()之類的函數使,可以使用過濾器應用在打開的stream上 // 寫入時用 str_rot13() 函數處理所有的流數據 file_put_contents("php://filter/write=string.rot13/resource=file:///path/to/somefile.txt","Hello World"); //也可以使用下面的方式 $h = fopen("test.txt", "r"); stream_filter_append($h, "string.rot13"); // Read data and encode/decode readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.google.com");
3 設置上下文(Stream Contexts)
$opts = array( "http"=>array( "method"=>"POST", "header"=> "Auth: SecretAuthTokenrn" . "Content-type: application/x-www-form-urlencodedrn" . "Content-length: " . strlen("Hello World"), "content" => "Hello World" ) ); $default = stream_context_get_default($opts); readfile("http://localhost/dev/streams/php_input.php",false,$default); //我們模擬了一個POST包 //查看 php_input.php 的 apache_request_headers() 會顯示結果 Array ( [Host] => localhost [Auth] => SecretAuthToken [Content-type] => application/x-www-form-urlencoded [Content-length] => 11 )
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/20622.html
摘要:元素序列流也提供了一個接口,可以訪問特定元素類型的一組有序值。因為集合是數據結構,所以它的主要目的是以特定的時間空間復雜度存儲和訪問元素如與。請注意,從有序集合生成流時會保留原有的順序。由列表生成的流,其元素順序與列表一致。 流是什么 流是Java API的新成員,它允許你以聲明性方式處理數據集合(通過查詢語句來表達,而不是臨時編寫一個實現)。可以把它們看成遍歷數據集的高級迭代器。此外...
摘要:在這個時刻,服務程序被驚醒并且為客戶提供服務對客戶的請求作出適當的反應。為了方便這種模型的網絡編程,年代初,由聯合了其他幾家公司共同制定了一套下的網絡編程接口,即規范,它不是一種網絡協議而是一套開放的支持多種協議的下的網絡編程接口。 這篇文章將會介紹一下 Socket 編程中相關的 PHP 函數,并簡單實現一個 C/S 的交互 Socket 簡介 Socket 的官方解釋:在網絡編程中...
閱讀 3247·2021-11-18 10:02
閱讀 1952·2021-09-22 10:54
閱讀 2995·2019-08-30 15:43
閱讀 2582·2019-08-30 13:22
閱讀 1583·2019-08-29 13:57
閱讀 1050·2019-08-29 13:27
閱讀 741·2019-08-26 14:05
閱讀 2529·2019-08-26 13:30