本篇文章主要介紹php中特殊的協議,php://協議詳解 ,有興趣的朋友了解一下。
php:// — 存取各個輸入/輸出流(I/O streams)
PHP 提供了一些雜項輸入/輸出(IO)流,允許存取PHP 的輸入輸出流、標準輸入輸出和錯誤描述符,記憶體中、磁碟備份的臨時檔案流以及可以操作其他讀取寫入檔案資源的過濾器。
、 和 允許直接訪問
PHP 進程對應的輸入或輸出流。資料流引用了複製的檔案描述符,所以如果你打開 並在之後關了它,
只是關閉了複製品,真正被引用的 STDIN
# 並不受影響。注意 PHP 在這方面的行為有很多 BUG 直到 PHP 5.2.1。建議你簡單使用常數 STDIN
、 STDOUT
和 STDERR
來取代手動開啟這些封裝器。
是唯讀的, 和 則是只寫的。
# 是可以存取要求的原始資料的唯讀流。 POST 請求的情況下,最好使用 來取代 ,因為它不依賴特定的 指令。 而且,這樣的情況下 預設沒有填充, 比啟動 always_populate_raw_post_data 潛在需要更少的記憶體。 enctype="multipart/form-data" 的時候 是無效的。
# 是只寫的資料流, 允許你以 print 和 echo 一樣的方式 寫入到輸出緩衝區。
# 允許直接存取指定的檔案描述子。 例如 引用了文件描述符 3。
和 則是類似文件 包裝器的資料流,允許讀寫臨時資料。兩者的唯一差異是 總是把資料儲存在記憶體中, 而 會在記憶體量達到預先定義的限制後(預設是 2MB)存入臨時文件中。暫存檔案位置的決定和 sys_get_temp_dir() 的方式一致。
的記憶體限制可透過添加 /maxmemory:NN 來控制,NN 是以位元組為單位、保留在記憶體的最大資料量,超過則使用臨時檔案。
# 是一種元封裝器, 設計用於資料流開啟時的篩選過濾應用。這對一體式(all-in-one)的檔案函數非常有用,類似 readfile()、file() 和 file_get_contents(), 在資料流內容讀取之前沒有機會套用其他過濾器。
目標使用以下的參數作為它路徑的一部分。 複合過濾鏈能夠在一個路徑上指定。詳細使用這些參數可以參考具體範例。
#名稱 | 描述 |
---|---|
resource=<要過濾的資料流> | 這個參數是必須的。它指定了你要篩選過濾的資料流。 |
read=<讀鏈的篩選清單> | 此參數可選。可設定一個或多個篩選器名稱,以管道符(|)分隔。 |
write=<寫鏈的篩選清單> | 此參數可選。可設定一個或多個篩選器名稱,以管道符(|)分隔。 |
<;兩個鏈結的篩選清單> | 任何沒有以 read= 或 write= 作前綴的篩選器清單會視情況套用於讀取或寫鏈。 |
屬性 | 支援 |
---|---|
首先於 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(等於寫入) | 允許同時讀寫 |
支援 | stat()|
支援 | unlink()|
支援 | rename()
#版本 | ##說明|
---|---|
增加 。 | |
增加 和 。 | |
增加 。 |
<br>Example #1 php://temp/maxmemory
#這個選用選項允許設定 開始使用暫存檔案前的最大記憶體限制。
<?php // Set the limit to 5 MB. $fiveMBs = 5 * 1024 * 1024; $fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+'); fputs($fp, "hello\n"); // Read what we have written. rewind($fp); echo stream_get_contents($fp); ?>
<?php /* 这简单等同于: readfile("http://www.example.com"); 实际上没有指定过滤器 */readfile("php://filter/resource= ?>
<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/>