本文學(xué)習(xí)目的:
為什么和第三方平臺對接接口的時候,在接收http請求數(shù)據(jù)包時,一般都是用file_get_contents("php://input"),而不是用$_POST呢?
在用php寫接口的時候,通常會將請求的數(shù)據(jù)通過json的形式發(fā)送到指定的請求地址處,此時的file_get_contents(‘php://input')主要是用來獲取請求的原始數(shù)據(jù)。和 $HTTP_RAW_POST_DATA 比起來,php://input給內(nèi)存帶來的壓力較小,并且不需要任何特殊的 php.ini 設(shè)置。
注意兩點:
數(shù)據(jù)的提交方式應(yīng)為POSTphp://input 不能用于接收enctype="multipart/form-data"表單提交的數(shù)據(jù)
1、舉一個簡單示例:
提交表單
form action="" method="POST"> 姓名: input type="text" name="name" value="tom" />br /> 年齡:input type="text" name="age" value="22" />br /> input type="submit" value="Submit" /> /form>
后端控制器通過file_get_contents(‘php://input'),獲取請求原始數(shù)據(jù)流
?php $content = file_get_contents('php://input', 'r'); echo $content; //輸出name=tomage=22 ?>
2、在項目應(yīng)用中,如攝像頭拍照,上傳保存,就可以用到php://input??蛻舳伺恼蘸?,把圖片流傳送到服務(wù)端,服務(wù)端使用file_get_getcontents(‘php://input')就能獲取到圖片流。
$_POST只能接收Content-Type: application/x-www-form-urlencoded提交的數(shù)據(jù),php會將http請求body相應(yīng)數(shù)據(jù)填入到數(shù)組_POST中,_POST數(shù)組中的數(shù)據(jù)是進(jìn)行urldecode()解析的結(jié)果。除了該Content-Type,還有 multipart/form-data類型的表單數(shù)據(jù)也可以用$_POST接收。
定義和用法
enctype 屬性規(guī)定在發(fā)送到服務(wù)器之前應(yīng)該如何對表單數(shù)據(jù)進(jìn)行編碼。默認(rèn)地,表單數(shù)據(jù)會編碼為 "application/x-www-form-urlencoded"。就是說,在發(fā)送到服務(wù)器之前,所有字符都會進(jìn)行編碼(空格轉(zhuǎn)換為 "+" 加號,特殊符號轉(zhuǎn)換為 ASCII HEX 值)。
enctype屬性值
Content-Type值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在發(fā)送前編碼所有字符(默認(rèn)) |
multipart/form-data |
不對字符編碼。 在使用包含文件上傳控件的表單時,必須使用該值。 |
text/plain | 空格轉(zhuǎn)換為 "+" 加號,但不對特殊字符編碼。 |
text/xml |
一種使用 HTTP 作為傳輸協(xié)議,XML 作為編碼方式的遠(yuǎn)程調(diào)用規(guī)范。 |
1、Coentent-Type僅在取值為application/x-www-data-urlencoded和multipart/form- data兩種情況下,PHP才會將http請求數(shù)據(jù)包中相應(yīng)的數(shù)據(jù)填入全局變量$_POST中。
2、PHP不能識別的Content-Type類型的時候,會將http請求包中相應(yīng)的數(shù)據(jù)填入變量$HTTP_RAW_POST_DATA中。
3、只有Coentent-Type為multipart/form-data的時候,PHP才不會將http請求數(shù)據(jù)包中的相應(yīng)數(shù)據(jù)填入php: //input,否則其它情況都會。填入的長度,由Coentent-Length指定。
4、只有Content-Type為application/x-www-data-urlencoded時,php://input數(shù)據(jù)才跟$_POST數(shù)據(jù)相一致。
5、如果不能獲取的時候,比如Coentent-Type為text/xml、application/json、soap,請使用 file_get_contents('php://input');
到此這篇關(guān)于php使用file_get_contents(‘php://input‘)和$_POST的區(qū)別實例對比的文章就介紹到這了,更多相關(guān)php使用file_get_contents和$_POST內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:唐山 柳州 遼陽 克拉瑪依 白城 鶴崗 鷹潭 六安
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php使用file_get_contents(‘php://input‘)和$_POST的區(qū)別實例對比》,本文關(guān)鍵詞 php,使用,file,get,contents,input,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。