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