PHP預設識别的資料類型是application/x-www.form-urlencoded标準的資料類型。
php擷取post參數的幾種方式
1、$_POST['paramName'] 隻能接收Content-Type: application/x-www-form-urlencoded送出的資料...php會将http請求body相應資料會 填入到數組$_POST,填入到$_POST數組中的資料是進行urldecode()解析的結果。(其實,除了該Content-Type,還有 multipart/form-data表示資料是表單資料)
2、file_get_contents("php://input") 适用大多數類型的Content-type
php://input 允許讀取 POST 的原始資料。和 $HTTP_RAW_POST_DATA 比起來,它給記憶體帶來的壓力較小,并且不需要任何特殊的 php.ini 設定。php://input 不能用于 enctype="multipart/form-data"。
3、$GLOBALS['HTTP_RAW_POST_DATA']; 總是産生 $HTTP_RAW_POST_DATA 變量包含有原始的 POST 資料。此變量僅在碰到未識别 MIME 類型的資料時産生。$HTTP_RAW_POST_DATA 對于 enctype="multipart/form-data" 表單資料不可用。
如果post過來的資料不是PHP能夠識别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,比如 text/xml 或者 soap 等等。需要設定php.ini中的always_populate_raw_post_data值為On,PHP才會總把POST資料填入變 量$http_raw_post_data。
1,Coentent-Type僅在取值為application/x-www-data-urlencoded和multipart/form- data兩種情況下,PHP才會将http請求資料包中相應的資料填入全局變量$_POST
2,PHP不能識别的Content-Type類型的時候,會将http請求包中相應的資料填入變量$HTTP_RAW_POST_DATA
3, 隻有Coentent-Type不為multipart/form-data的時候,PHP不會将http請求資料包中的相應資料填入php: //input,否則其它情況都會。填入的長度,由Coentent-Length指定。
4,隻有Content-Type為application/x-www-data-urlencoded時,php://input資料才 跟$_POST資料相一緻。
5,php://input資料總是跟$HTTP_RAW_POST_DATA相同,但是php://input 比$HTTP_RAW_POST_DATA更湊效,且不需要特殊設定php.ini
6,PHP會将PATH字段的query_path部分,填入全局變量$_GET。通常情況下,GET方法送出的http請求,body為空。