2011-08-16 45 views
10
$handle = fopen("/home/rasmus/file.txt", "r"); 
$handle = fopen("/home/rasmus/file.gif", "wb"); 

我可以理解,/home/rasmus/file.txt/home/rasmus/file.gif是文件路徑。php://輸入 - 它在fopen()中做了什麼?

但這些意味着什麼:

php://input 
php://temp 

$objInputStream = fopen("php://input", "r"); 
$objTempStream = fopen("php://temp", "w+b"); 

他們做些什麼?

+1

請參閱[PHP輸入/輸出流](http://php.net/manual/en/wrappers.php.php)。 – netcoder

回答

7

php://input是一個只讀流,允許您從請求主體讀取原始數據。在POST請求的情況下,它最好是$HTTP_RAW_POST_DATA,因爲它不依賴於特殊的php.ini指令。此外,對於默認情況下未填充$HTTP_RAW_POST_DATA的情況,這是激活always_populate_raw_post_data的潛在更少內存密集型替代方案。 php://輸入不適用於enctype="multipart/form-data"

退房手動:http://php.net/manual/en/wrappers.php.php

+0

最後一句話不再準確。設置['enable_post_data_reading = 0'](http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading)將禁止解析'php:// input'流入'$ _FILES',使'php://輸入'可讀多部分請求。 – Dave

6

php://temp存儲在一個臨時文件,該文件只對腳本的執行期間訪問的數據。這是一個真正的文件,但腳本終止後會立即清除,不像fopen()打開的真正文件,該文件將保留在文件系統中。

php://input用於讀取原始HTTP請求主體,而無需$_POST$_SERVER變量抽象出來。當服務器將它傳遞給PHP解釋器時,php://input流將訪問整個HTTP請求。

+3

並非完全正確:*「php:// temp將在存儲的數據量達到預定義限制(默認值爲2 MB)時使用臨時文件。」* – netcoder

3

這些是stream wrappers,並允許您從各種流中讀取。讀取和寫入流的方式與文件相同(可能存在一些限制,例如,不是每個流包裝器都支持fseek)。 php://input可讓您訪問原始HTTP數據(如果服務器配置爲預填充,它可在$ HTTP_RAW_POST_DATA中獲得)。最佳 - 閱讀文檔中的相應部分

+0

...那麼修飾符標誌會做什麼? – Pacerier

相關問題