程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 【PHP】$_POST, $HTTP_RAW_POST_DATA, and php://input,httprawpostdata

【PHP】$_POST, $HTTP_RAW_POST_DATA, and php://input,httprawpostdata

編輯:關於PHP編程

【PHP】$_POST, $HTTP_RAW_POST_DATA, and php://input,httprawpostdata


1、HTML <form> enctype Attribute

  • application/x-www-form-urlencoded  傳送之前所有的字符都會被encoded,(spaces 被轉換為+、特殊字符被轉換為ASCII HEX)
  • multipart/form-data  沒有字符被encoded,一般用upload
  • text/plain Spaces被轉換為 + ,但是特殊字符不會被encoded

For example, the key-value pairs

name: Jonathan Doe
age: 23
formula: a + b == 13%!

are encoded as the following raw data:

name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21

$_POST

Array
(
    [name] => Jonathan Doe
    [age] => 23
    [formula] => a + b == 13%!
)

$HTTP_RAW_POST_DATA

print_r($GLOBALS['HTTP_RAW_POST_DATA'] );
name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21

php://input

$post_data = file_get_contents('php://input');
print_r($post_data);

name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21

2、$_POST

$_POST是最常用的獲取表單的方式,它是以關聯數組方式組織提交的數據,並對此進行編碼處理,如urldecode,甚至編碼轉換,識別的數據類型是PHP默認識別的數據類型 application/x-www.form-urlencoded

無法解析如text/xml,application/json等非 application/x-www.form-urlencoded 數據類型的內容

3、$HTTP_RAW_POST_DATA

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 才會生效

  • 當$_POST 與 php://input可以取到值時 $HTTP_RAW_POST_DATA 為空

  • 不能用於 enctype="multipart/form-data"

  • PHP7中已經移除了這個全局變量,用 php://input 替代,使用 always_populate_raw_post_data 會導致在填充 $HTTP_RAW_POST_DATA 時產生 E_DEPRECATED 錯誤。 請使用php://input 替代 $HTTP_RAW_POST_DATA, 因為它可能在後續的 PHP 版本中被移除。 設置always_populate_raw_post_data 為 -1 (這樣會強制 $HTTP_RAW_POST_DATA 未定義,所以也不回導致 E_DEPRECATED的錯誤) 來體驗新的行為。

4、php://input

php://input 可通過輸入流以文件讀取方式取得未經處理的POST原始數據,允許讀取 POST 的原始數據。和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小。

  • 不需要任何特殊的 php.ini 設置

  • 不能用於 enctype="multipart/form-data"

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved