本篇內容介紹了“Stream上下文怎么操作”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Stream是什么
Stream可以通過://方式來引用。其中是包裝類的名字,中的內容是由包裝類的語法指定,不同的包裝類的語法會有所不同。
PHP默認的包裝類是file://,也就是說我們在訪問文件系統的時候,其實就是在使用一個stream。我們可以通過下面兩種方式來讀取文件中的內容,readfile(‘/path/to/somefile.txt’)或者readfile(‘file:///path/to/somefile.txt’),這兩種方式是等效的。假如你是使用readfile(‘http://google.com/’),那么PHP會選取HTTPstream包裝類來進行操作。
正如上文所述,PHP提供了不少內建的包轉類,protocol以及filter。按照下文所述的方式,可以查詢到本機所支持的包裝類:
print_r(stream_get_transports());
print_r(stream_get_wrappers());
print_r(stream_get_filters());
在我機器上的輸出結果為:
Array
(
[0]=>tcp
[1]=>udp
[2]=>unix
[3]=>udg
[4]=>ssl
[5]=>sslv3
[6]=>sslv2
[7]=>tls
)
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
)
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.*
)
提供的功能非常多,看上去還不錯吧?
除了上述內建的Stream,我們還可以為AmazonS3,MSExcel,GoogleStorage,Dropbox甚至Twitter編寫更多的第三方的Stream。
Stream上下文怎么操作
context是一組stream相關的參數或選項,使用context可以修改或增強包裝類的行為。例如使用context來修改HTTP包裝器是一個常用到的使用場景。這樣我們就可以不使用cURL工具,就能完成一些簡單的網絡操作。下面是一個例子:
$opts=array(
'http'=>array(
'method'=>"POST",
'header'=>"Auth:SecretAuthTokenrn".
"Content-type:application/x-www-form-urlencodedrn".
"Content-length:".strlen("HelloWorld"),
'content'=>'HelloWorld'
)
);
$default=stream_context_get_default($opts);
readfile('http://localhost/dev/streams/php_input.php');
首先要定義一個optionsarray,這是個二位數組,可以通過$array['wrapper']['option_name']的形式來訪問其中的參數。(注意每個包裝類中context的options是不同的)。然后調用stream_context_get_default()來設置這些option,stream_context_get_default()同時還會將默認的context作為結果返回回來。設置完成后,接下來調用readfile(),就會應用剛才設置好的context來抓取內容。
在上面的例子中,內容被嵌入到request的body中,這樣遠端的腳本就可以使用php://input來讀取這些內容。同時,我們還能使用apache_request_headers()來獲取request的header,如下所示:
Array
(
[Host]=>localhost
[Auth]=>SecretAuthToken
[Content-type]=>application/x-www-form-urlencoded
[Content-length]=>11
)
在上面的例子中是修改默認context的參數,當然我們也可以創建一個新的context,進行交替使用。
$alternative=stream_context_create($other_opts);
readfile('http://localhost/dev/streams/php_input.php',false,$alternative);
結論
我們怎樣在現實世界中駕馭stream的強大力量呢?使用stream能為我們的程序帶來什么現實的好處?正如前文介紹的那樣,stream對所有文件系統相關的功能進行了抽象,所以我第一個想到的應用場景是使用虛擬文件系統的包裝類來訪問PaaS供應商提供的服務,比如說訪問HeroKu或者AppFog,它們實際上都沒有真正文件系統。使用stream只要對我們的應用程序稍作修改,就可以將其移植到云端。接下來–在我的下一篇文章中–我將介紹如何編寫自定義的包裝類以實現對特殊文件格式和編碼格式的操作。
“Stream上下文怎么操作”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!
網頁題目:Stream上下文怎么操作-創新互聯
分享路徑:http://vcdvsql.cn/article16/cccpdg.html
成都網站建設公司_創新互聯,為您提供云服務器、網站設計、網站設計公司、動態網站、外貿建站、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯