天天看點

php $_request 取不到值,PHP $_POST$_REQUEST擷取不到參數原因

PHP $_POST$_REQUEST擷取不到參數原因

PHP $_POST,$_REQUEST擷取不到參數原因

首先了解下《$_POST,$HTTP_RAW_POST_DATA 和 php://input 的差別》之間的差別:

标簽的 enctype 屬性:

1:application/x-www-form-urlencoded   -->  預設模式,在發送到伺服器之前,所有字元都會進行編碼(空格轉換為 "+" 加号,特殊符号轉換為 ASCII HEX 值

2:multipart/form-data   --> 不對字元編碼,在使用包含檔案上傳控件的表單時,必須使用該值。

3:text/plain  -->  空格轉換為 "+" 加号,但不對特殊字元編碼。

PHP 可以用 ($_POST,$HTTP_RAW_POST_DATA 和 php://input)方式來擷取Post 資料;

$_POST,是擷取表單 POST 過來資料(body部分)的最常用方法,上傳的檔案資訊使用 $_FILES 擷取。)

當浏覽器從表單發送 POST 請求的時候,預設的 media type 是 "application/x-www-form-urlencoded",意思就是字段名和值都編碼了,每個 key-value 對使用 '&' 字元分隔開,key 和 value 使用 '=' 分開,并且 key 和 value 中的空格都會被替換成 + ,其他特殊字元都會被使用 urlencode 方式進行編碼。)

例子:

nickname: leyangjun php

num: 18

formula: a + b == 66%!

nickname=leyangjun+php&num=18&formula=a+%2B+b+%3D%3D+13%25%21

PHP會解析這些原始的POST資料,并且格式化成數組,填充到 $_POST 中:

Array

(

[nickname] => leyangjun php

[num] => 18

[formula] => a + b == 13%!

)

$HTTP_RAW_POST_DATA 是 PHP 的一個預定義的變量,用來擷取原始的 POST 資料,比如上面的情況下,$HTTP_RAW_POST_DATA 的值就是:nickname=leyangjun+php&num=18&formula=a+%2B+b+%3D%3D+13%25%21;

不支援 enctype="multipart/form-data" 方式傳遞的資料,這種情況下,我們要用 $_POST 擷取字段的内容,$_FILES 來擷取上傳的檔案資訊 ;

需要在 php.ini 中設定開啟:always_populate_raw_post_data = On,php7後已經是-1(WarningThis feature was DEPRECATED in PHP 5.6.0, and REMOVED as of PHP 7.0.0.),被删除了;

原始的 POST 資料有什麼用:很多時候接收到不是網頁 POST 過來的資料,而是可能通過其他方式 POST 過來的 "text/xml" 格式的資料,這些内容無法解析成 $_POST 數組,這個時候我們就需要原始的 POST 資料進行處理

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

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

postman中 form-data、x-www-form-urlencoded、raw、binary操作:https://images1.tqwba.com/20200623/55fhqbkgjoj

PHP $_POST$_REQUEST擷取不到參數原因相關教程