$_POST是咱們最經常使用的獲取POST數據的方式,它是以關聯數組方式組織提交的數據,並對此進行編碼處理,如urldecode,甚至編碼轉換,識別的數據類型是PHP默認識別的數據類型 application/x-www.form-urlencodedphp
沒法解析如text/xml,application/json等非 application/x-www.form-urlencoded 數據類型的內容json
前面說過PHP默認識別的數據類型是application/x-www.form-urlencoded,用Content-Type=application/json 類型,提交的POST數據這時候 $_POST 就沒法獲取到了,可是使用 $GLOBALS['HTTP_RAW_POST_DATA'] 能夠獲取到。由於在PHP沒法識別Content-Type的時候,就會把 POST 數據填入到 $HTTP_RAW_POST_DATA 中。數組
須要設置 php.ini 中的
always_populate_raw_post_data
值爲 On 纔會生效app當$_POST 與 php://input能夠取到值時 $HTTP_RAW_POST_DATA 爲空post
不能用於 enctype="multipart/form-data"編碼
PHP7中已經移除了這個全局變量,用 php://input 替代url
php://input 可經過輸入流以文件讀取方式取得未經處理的POST原始數據,容許讀取 POST 的原始數據。和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小。code
不須要任何特殊的 php.ini 設置orm
不能用於 enctype="multipart/form-data"xml
上面了介紹了一下咱們目前使用PHP獲取POST數據的三種方式,當咱們之後使用PHP來獲取POST數據的時候用$_POST或者php://input就行了。雖然HTTP_RAW_POST_DATA能夠達到和php://input同樣的目的,可是會給內存帶來較大的壓力,官方也注意到了這個問題,因此在PHP7就果斷移除了這個很差用的東東。。。