首頁 >後端開發 >php教程 >php中特殊的協議,php://協議詳解

php中特殊的協議,php://協議詳解

墨辰丷
墨辰丷原創
2018-05-15 17:48:282625瀏覽

本篇文章主要介紹php中特殊的協議,php://協議詳解 ,有興趣的朋友了解一下。

php:// — 存取各個輸入/輸出流(I/O streams)


說明 


PHP 提供了一些雜項輸入/輸出(IO)流,允許存取PHP 的輸入輸出流、標準輸入輸出和錯誤描述符,記憶體中、磁碟備份的臨時檔案流以及可以操作其他讀取寫入檔案資源的過濾器。


php://stdin, php://stdout 和php://stderr 


、 和  允許直接訪問 PHP 進程對應的輸入或輸出流。資料流引用了複製的檔案描述符,所以如果你打開 並在之後關了它, 只是關閉了複製品,真正被引用的 STDIN# 並不受影響。注意 PHP 在這方面的行為有很多 BUG 直到 PHP 5.2.1。建議你簡單使用常數 STDIN、 STDOUT 和 STDERR 來取代手動開啟這些封裝器。

 是唯讀的,  和  則是只寫的。


php://input 


# 是可以存取要求的原始資料的唯讀流。 POST 請求的情況下,最好使用  來取代 ,因為它不依賴特定的  指令。 而且,這樣的情況下  預設沒有填充, 比啟動 always_populate_raw_post_data 潛在需要更少的記憶體。 enctype="multipart/form-data" 的時候  是無效的。

Note 開啟的資料流只能讀取一次; 資料流不支援​​ seek 操作。不過,依賴 SAPI 的實現,請求體資料被保存的時候, 它可以開啟另一個  資料流並重新讀取。 通常情況下,這種情況只是針對 POST 要求,而不是其他要求方式,例如 PUT 或 PROPFIND。


php://output 


# 是只寫的資料流, 允許你以 print 和 echo 一樣的方式 寫入到輸出緩衝區。


php://fd 


# 允許直接存取指定的檔案描述子。 例如  引用了文件描述符 3。


php://memory 和 php://temp 


 和  則是類似文件 包裝器的資料流,允許讀寫臨時資料。兩者的唯一差異是  總是把資料儲存在記憶體中, 而  會在記憶體量達到預先定義的限制後(預設是 2MB)存入臨時文件中。暫存檔案位置的決定和 sys_get_temp_dir() 的方式一致。

 的記憶體限制可透過添加 /maxmemory:NN 來控制,NN 是以位元組為單位、保留在記憶體的最大資料量,超過則使用臨時檔案。


php://filter 


# 是一種元封裝器, 設計用於資料流開啟時的篩選過濾應用。這對一體式(all-in-one)的檔案函數非常有用,類似 readfile()file() 和 file_get_contents(), 在資料流內容讀取之前沒有機會套用其他過濾器。

 目標使用以下的參數作為它路徑的一部分。 複合過濾鏈能夠在一個路徑上指定。詳細使用這些參數可以參考具體範例。

php://filter 參數
#名稱 描述
resource=612b7b5ea65c1cd1bbcf989b2fc85107 這個參數是必須的。它指定了你要篩選過濾的資料流。
read=ffd9cdbf5591c3d8d4aa38410b414621 此參數可選。可設定一個或多個篩選器名稱,以管道符(|)分隔。
write=c0356c1cef101c9dfab9942217d04af8 此參數可選。可設定一個或多個篩選器名稱,以管道符(|)分隔。
5fa171020def02c023c6e98cf3d5da8f 任何沒有以 read= 或 write= 作前綴的篩選器清單會視情況套用於讀取或寫鏈。


可選項 

#No只 php://input、 php://stdin、 php://memory 與 php://temp。 允許追加#只 php://fd、 php://memory 和 php:// temp。 stat()只 php://memory 和 php://temp。 unlink()#Norename()No
封裝協定摘要(針對 php://filter,參考已篩選的封裝器。 )
屬性 支援
首先於 allow_url_fopen
首先於 allow_url_include
允許讀取 只 php://stdin、 php://input、 php://fd、 php://memory 和 php:// temp。
允許寫入只 php://stdout、 php://stderr、 php://output、 php://fd、 php:// memory 和 php://temp。
只 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory和 php://temp(等於寫入) 允許同時讀寫
支援 
支援 
支援 
######支持 ###mkdir()#########No###########支持###rmdir()#########No############只支援 ###stream_select()#########php://stdin 、 php://stdout、 php://stderr、 php://fd 和 php://temp。 ############



更新日誌 

##說明5.3.6增加 。 5.1.0增加  和 。 5.0.0增加 。
#版本



#範例 



範例 


<br>Example #1 php://temp/maxmemory

#這個選用選項允許設定  開始使用暫存檔案前的最大記憶體限制。

<?php
// Set the limit to 5 MB.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", &#39;r+&#39;);

fputs($fp, "hello\n");

// Read what we have written.
rewind($fp);
echo stream_get_contents($fp);
?>


Example #2 php://filter/resource=06da619ffc14537665186dac0cab8f41


這個參數必須位於  的末端,並且指向需要過濾篩選的資料流。


<?php
/* 这简单等同于:  
readfile("http://www.example.com");  
实际上没有指定过滤器 
*/readfile("php://filter/resource= 
?>

Example #3 php://filter/read=d1e9ad73b563596584e857ffaab1871f

<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span>這個參數採用一個或以管道符 | 分隔的多個篩選器名稱。 </span><br>

<?php
/* 这会以大写字母输出 www.example.com 的全部内容 */
readfile
(
"php://filter/read=string.toupper/resource=http://www.example.com"
);
/* 这会和以上所做的一样,但还会用 ROT13 加密。 */
readfile
(
"php://filter/read=string.toupper|string.rot13/resource=http://www.example.com"
);
?>



<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><br>

Example #4 php://filter/write=e09a93224cabf57cbc5ff83892066c87

這個參數採用一個或以管道符 | 分隔的多個過濾器名稱。

<?php
/* 这会通过 rot13 过滤器筛选出字符 "Hello World"
  然后写入当前目录下的 example.txt */
file_put_contents
(
"php://filter/write=string.rot13/resource=example.txt"
,
"Hello World"
);
?>

##################### 相關推薦:#### #####PHP中Http協定post請求參數,php協定post請求_PHP教學#############PHP中Http協定post請求參數,php協定post請求################################################### ######php post提交出現Input variables exceeded 1000#######

以上是php中特殊的協議,php://協議詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn