首頁  >  文章  >  後端開發  >  php有取得post參數的方法嗎

php有取得post參數的方法嗎

L
L原創
2020-06-01 16:52:113159瀏覽

php有取得post參數的方法嗎

php取得post參數的幾種方式

PHP預設識別的資料型別是application/x-www .form-urlencoded標準的資料型態。

1、$_POST['paramName'] 只有在Content-Type為application/x-www-form-urlencoded或multipart/form-data的時候,PHP才會將http請求封包中的body對應部分資料填入$_POST全域變數中,其它情況PHP都忽略。填入$_POST數組中的資料是進行urldecode()解析的結果。

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。

看官方文檔,在高版本裡,這個變數$HTTP_RAW_POST_DATA被棄用了
This feature wasDEPRECATEDin​​ PHP 5.6.0, andREMOVEDas of PHP 7.0.0. In general,php://inputshould be used instead of$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相同,都只讀取Content-Type不為multipart/form-data的數據,但是php://input 比$HTTP_RAW_POST_DATA更湊效,且不需要特殊設定php.ini

6,PHP會將PATH欄位的query_path部分,填入全域變數$_GET。通常情況下,GET方法提交的http請求,body為空。

7,php://input讀取不到$_GET資料。是因為$_GET資料是作為query_path寫在http請求頭(header)的PATH字 段,而不是寫在http請求的body部分。

8、如果是application/x-www-form-urlencoded 和multipart/form-data 格式用$_POST;

9、如果不能取得的時候,例如text/xml、application /json、soap,使用file_get_contents('php://input');

推薦教學:《PHP教學

以上是php有取得post參數的方法嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn