接受數據的三種方式

##1. php://input 和$_POST和$GLOBALS['HTTP_RAW_POST_DATA']php

print_r($GLOBALS['HTTP_RAW_POST_DATA']);

Notice: Undefined index: HTTP_RAW_POST_DATA in E:\www\test2\test.php on line 10



在php.ini裏設置,打開 php.ini 文件,搜索下就能夠找到。
always_populate_raw_post_data = On


php 5.6 php.ini
; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is
; to disable this feature and it will be removed in a future version.
; If post reading is disabled through enable_post_data_reading,
; $HTTP_RAW_POST_DATA is *NOT* populated.
; http://php.net/always-populate-raw-post-data
always_populate_raw_post_data = -1

##HTTP_RAW_POST_DATA在新版版本中廢棄了用這個代替php://input stream instead數組

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0

Warning: Cannot modify header information - headers already sent in Unknown on line 0
name=123&password=adminname=123&password=admin

##http_raw_post_data 是PHP內置的一個全局變量。 它用於,app

  1. PHP在沒法識別的Content-Type的狀況下,將POST過來的數據原樣地填入變量$http_raw_post_data。post

  2. 它沒法讀取Content-Type爲multipart/form-data的POST數據。this

  3. 須要設置php.ini中的always_populate_raw_post_data值爲On,PHP纔會總把POST數據填入變量$http_raw_post_data。編碼

  4. 以關聯數組方式組織提交的數據,並對此進行編碼處理,如urldecode,甚至編碼轉換;url

  5. 廢棄了.net

##php://input3d

  1. php://input 容許讀取 POST 的原始數據。
  2. 和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,
  3. 不須要任何特殊的 php.ini 設置。
  4. php://input 不能用於 enctype=」multipart/form-data」;
  5. 進行編碼處理 (name=123dd%E5%BE%97%E5%87%BA%E7%9A%84&password=1235)
  6. php://input讀取不到$_GET數據。是由於$_GET數據做爲query_path寫在http請求頭部(header)的PATH字段,而不是寫在http請求的body部分。
1.php://input 沒法讀取到 表單類型爲 enctype=multipart/form-data的數據 

   2.而$GLOBALS['HTTP_RAW_POST_DATA']在PHP在沒法識別的 Content-Type的狀況下,將POST過來的數據原樣地填入變量$http_raw_post_data,可是也沒法讀取到Content- Type爲multipart/form-data的POST數據。 

  3.GET的數據他們三個(POST,INPUT ,HTTP_RAW_POST_DATA都拿不到)

另外一份文檔

$_POST:經過 HTTP POST 方法傳遞的變量組成的數組。是自動全局變量。code

$GLOBALS['HTTP_RAW_POST_DATA'] :老是產生 $HTTP_RAW_POST_DATA 變量包含有原始的 POST 數據。此變量僅在碰到未識別 MIME 類型的數據時產生。$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用。

也就是說基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是同樣的。

可是若是post過來的數據不是PHP可以識別的,你能夠用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,好比 text/xml 或者 soap 等等。

$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用。

補充說明:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。

php://input 容許讀取 POST 的原始數據。和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,而且不須要任何特殊的 php.ini 設置

相關文章
相關標籤/搜索