初見file_get_contents(“php://input”) ,給我第一感覺就是 還有這樣寫法?好吧 真有
“php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype=”multipart/form-data”.
翻譯過來,是這樣: “php://input可以讀取沒有處理過的POST數據。相較于$HTTP_RAW_POST_DATA而言,它給內存帶來的壓力較小,并且不需要特殊的php.ini設置。php://input不能用于enctype=multipart/form-data” 找了一通資料,原來是這么回事:
1,Coentent-Type僅在取值為application/x-www-data-urlencoded和multipart/form-data兩種情況下,
PHP才會將http請求數據包中相應的數據填入全局變量$_POST
2,PHP不能識別的Content-Type類型的時候,會將http請求包中相應的數據填入變量$HTTP_RAW_POST_DATA
3, 只有Coentent-Type不為multipart/form-data的時候,PHP不會將http請求數據包中的相應數據填入php://input,
否則其它情況都會。填入的長度,由Coentent-Length指定。
4,只有Content-Type為application/x-www-data-urlencoded時,php://input數據才跟$_POST數據相一致。
5,php://input數據總是跟
且不需要特殊設置php.ini
6,PHP會將PATH字段的query_path部分,填入全局變量$_GET。通常情況下,GET方法提交的http請求,body為空。
從官網信息來看,php://input是一個只讀信息流,當請求方式是post的,并且enctype不等于”multipart/form-data”時,可以使用php://input來獲取原始請求的數據。
看一個簡單的例子。
客戶端就是一個表單,非常簡單。
<form action="" method="POST"> name: <input type="text" name="name" value="tom" /><br /> age:<input type="text" name="age" value="22" /><br /> <input type="submit" value="Submit" /></form>將表單提交到服務端,服務端使用file_get_contents獲取php://input內容
$content = file_get_contents("php://input");echo $content; //輸出name=tom&age=22官網關于php://input的說明中,反復有提到$HTTP_RAW_POST_DATA這個變量,這個變量其實和file_get_contents(php://input)的內容是一樣的。如果要開啟這個變量,需要修改配置文件,找到always_populate_raw_post_data這個選項,設置為On,然后重新啟動web服務器,就可以了。而使用php://input不需要修改php配置文件。
在項目應用中,如攝像頭拍照,上傳保存,就可以用到php://input??蛻舳伺恼蘸?,把圖片流傳送到服務端,服務端使用file_get_getcontents(‘php://input’)就能獲取到圖片流,然后把圖片流保存到一個文件,這個文件就是圖片了。
轉帖地址http://blog.csdn.net/slyjit/article/details/16113433
新聞熱點
疑難解答
圖片精選