$POST
$_POST
是我們最常用的獲取POST數(shù)據(jù)的方式,它是以關(guān)聯(lián)數(shù)組方式組織提交的數(shù)據(jù),并對此進行編碼處理,如urldecode
搓扯,甚至編碼轉(zhuǎn)換,識別的數(shù)據(jù)類型是PHP默認(rèn)識別的數(shù)據(jù)類型 application/x-www.form-urlencoded
無法解析如text/xml包归,application/json
等非 application/x-www.form-urlencoded
數(shù)據(jù)類型的內(nèi)容
HTTP_RAW_POST_DATA
前面說過PHP默認(rèn)識別的數(shù)據(jù)類型是application/x-www.form-urlencoded
,用Content-Type=application/json
類型锨推,提交的POST數(shù)據(jù)這時候 $_POST
就無法獲取到了,但是使用 $GLOBALS['HTTP_RAW_POST_DATA']
可以獲取到公壤。因為在PHP無法識別Content-Type的時候换可,就會把 POST 數(shù)據(jù)填入到
$HTTP_RAW_POST_DATA `中。
需要設(shè)置 php.ini 中的
always_populate_raw_post_data
值為 On 才會生效當(dāng)
$_POST
與php://input
可以取到值時$HTTP_RAW_POST_DATA
為空不能用于
enctype="multipart/form-data"
PHP7中已經(jīng)移除了這個全局變量境钟,用
php://input
替代
php://input
php://input
可通過輸入流以文件讀取方式取得未經(jīng)處理的POST原始數(shù)據(jù)锦担,允許讀取 POST 的原始數(shù)據(jù)。和 $HTTP_RAW_POST_DATA 比起來慨削,它給內(nèi)存帶來的壓力較小。
不需要任何特殊的 php.ini 設(shè)置
不能用于
enctype="multipart/form-data"
小結(jié)
上面了介紹了一下我們目前使用PHP獲取POST數(shù)據(jù)的三種方式,當(dāng)我們以后使用PHP來獲取POST數(shù)據(jù)的時候用$_POST或者php://input
就好了缚态。雖然HTTP_RAW_POST_DATA
可以達到和php://input
一樣的目的磁椒,但是會給內(nèi)存帶來較大的壓力,官方也注意到了這個問題玫芦,所以在PHP7就果斷移除了這個不好用的東東浆熔。。桥帆。