PHP輸入和輸出資料流是通過php://來訪問的,它允許訪問 PHP 的輸入輸出資料流、標準輸入輸出和錯誤描述符, 記憶體中、磁碟備份的臨時檔案流以及可以操作其他讀取寫入檔案資源的過濾器。
php://stdin, php://stdout 和 php://stderr
php://stdin,php://stdout 和 php://stderr允許訪問 PHP 進程相應的輸入或者輸出資料流。
php://input
php://input 是個可以訪問請求的未經處理資料的唯讀流。 POST 請求的情況下,最好使用 php://input 來代替 $HTTP_RAW_POST_DATA(原生的post資料),因為它不依賴於特定的 php.ini 指令,記憶體消耗更少。如下例:
<form action="" method="post"> <input type="text" name="test" > <input type="submit" name="" /></form><?php echo file_get_contents("php://input");?>
結果:
php://output
php://output 是一個唯寫的資料流, 允許你以 print 和 echo 一樣的方式 寫入到輸出緩衝區。
php://fd
php://fd 允許直接存取指定的檔案描述符。 例如 php://fd/3 引用了檔案描述符 3。
php://memory 和 php://temp
php://memory 和 php://temp 是一個類似檔案 封裝器的資料流,允許讀寫臨時資料。 兩者的唯一區別是 php://memory 總是把資料儲存在記憶體中, 而 php://temp 會在記憶體量達到預定義的限制後(預設是 2MB)存入臨時檔案中。 臨時檔案位置的決定和 sys_get_temp_dir() 的方式一致。
php://filter
php://filter 是一種元封裝器, 設計用於資料流開啟時的篩選過濾應用。 這對於一體式(all-in-one)的檔案函數非常有用,類似 readfile()、 file() 和 file_get_contents(), 在資料流內容讀取之前沒有機會應用其他過濾器。參數如下:
如下例:
<?php/* 這會以大寫字母輸出 www.jb51.net 的全部內容 */readfile("php://filter/read=string.toupper/resource=http://www.jb51.net");?>