首頁  >  文章  >  後端開發  >  PHP取得HTTP POST中不同格式的數據

PHP取得HTTP POST中不同格式的數據

藏色散人
藏色散人轉載
2019-04-27 09:43:122819瀏覽

HTTP協定中的POST 方法有多中格式的資料協定,在HTTP的head中用不同的Content-type標識.常用的有

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測試一下

PHP取得HTTP POST中不同格式的數據

#沒問題,可以接收到

2.使用$GLOBALS['HTTP_RAW_POST_DATA']接收

<?php
$test=$GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];
echo $test;

用postman測試一下

PHP取得HTTP POST中不同格式的數據

臥槽,竟然出錯了,提示沒有發現HTTP_RAW_POST_DATA這個陣列索引,什麼鬼.Google一番,在php的官網看到了這樣一段話

PHP取得HTTP POST中不同格式的數據

原來HTTP_RAW_POST_DATA這個在php5.6中已經被廢棄了,在php7.0以後的版本中已經被刪除了,我用的php版本是7.2,肯定就出錯了

好吧,那就老實的用file_get_contents("php://input")取得吧

#在實際開發中,一般都是使用框架的,我用thinkphp用比較多,在tp5.0中可以使用Request的getInput()函數獲取Raw中的資料

<?php

namespace app\index\controller;

use think\Request;

class Index
{
    public function index(Request $request)
    {
        echo $request->getInput();
    }
}

測試一下

PHP取得HTTP POST中不同格式的數據

沒有問題,可以正常取得

關於php取得HTTP POST資料的方法先介紹到這裡,希望對需要的朋友有幫助!

以上是PHP取得HTTP POST中不同格式的數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:aliyun.com。如有侵權,請聯絡admin@php.cn刪除