application/x-www-form-urlencoded
,這是最常見的,就是from表單的格式.在HTTP的head中是Content-Type: application/x-www-form-urlencoded.
multipart/form-data
,這個是用來上傳檔案的,在HTTP的head中是Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Raw 這個不是特別常用,傳輸的資料在HTTP的body中只有一段,不是以鍵值對的形式存放.在HTTP的head中是Content-Type: application/json
,Content-Type: text
,Content-Type: application/xml
,Content-Type: text/xml
,等等形式
對於Content-Type: application/x-www-form-urlencoded
這種form表單的資料,在php中,使用$_POST['name']
可以直接獲取, 沒有什麼特別的
Content-Type: multipart/form-data;
這種格式的資料,在php中使用$_POST['name']
可以獲取字元資料,使用$_FILES['file']
可以獲取.
對於Raw這種格式的資料,使用以上兩種辦法沒有辦法獲取到,需要使用別的手段.
1.使用file_get_contents("php://input")
獲取;寫一個簡單php檔案測試一下
<?php $test=file_get_contents("php://input"); echo $test;
用postman測試一下
沒問題,可以接收到
2.使用$GLOBALS['HTTP_RAW_POST_DATA']
接收
<?php $test=$GLOBALS['HTTP_RAW_POST_DATA']; echo $test;
用postman測試一下
臥槽,竟然出錯了,提示沒有發現HTTP_RAW_POST_DATA
這個陣列索引,甚麼鬼.Google一番,在php的官網看到了這樣一段話
原來HTTP_RAW_POST_DATA
這個在php5.6中已經被廢棄了,在php7.0以後的版本中已經被刪除了,我用的php版本為7.2,肯定就出錯了
好吧,那就老老實實的用file_get_contents("php://input")
獲取吧
在實際開發中,一般都是使用框架的,我用thinkphp用比較多,在tp5.0中可以使用Request的getInput()函數獲取Raw中的資料
<?php namespace appindexcontroller; use thinkRequest; class Index { public function index(Request $request) { echo $request->getInput(); } }
測試一下
沒有問題,可以正常獲取
關於php獲取HTTP POST資料的方法先介紹到這裡,希望對需要的朋友有所幫助!
以上就是PHP獲取HTTP POST中不同格式的資料的詳細內容,更多請關注TW511.COM其它相關文章!