php接收json數據


寫php這么些年了,好多知識點都沒有總結,來記錄一下。畢竟日拱一卒無有盡,功不唐捐終入海。

用php來做APP的接口開發,但是在用postman模擬提交數據的時候$_POST$_REQUEST都獲取不到json數據,只能使用file_get_contents('php://input')

查過資料后發現,原來PHP默認只識別application/x-www.form-urlencoded標准的數據類型,對如text/xml或者 soap 或者 application/octet-stream之類的內容無法解析,如果用$_POST數組來接收就會失敗,但保留了原型,交給$GLOBALS['HTTP_RAW_POST_DATA']來接收。

正確的姿勢是這樣的:

將postman請求頭設置為 Content-Type: application/json; charset=utf-8,向php發起請求

第一種方法

// 這樣php就接收到postman發送過來的json值了
$response = json_decode(file_get_contents('php://input'), true);

第二種方法

// 這樣php就接收到postman發送過來的json值了
$response = $GLOBALS['HTTP_RAW_POST_DATA'];

使用$HTTP_RAW_POST_DATA,需要設置php.ini中的always_populate_raw_post_data值為On。

它包含了POST的原始數據。但這不是一個超全局變量,要在函數中使用它,必須聲明為global,或使用$GLOBALS['HTTP_RAW_POST_DATA']代替。

php://input 允許讀取 POST 的原始數據,但和 $GLOBALS['HTTP_RAW_POST_DATA'] 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的 php.ini 設置。

這兩種方法都 不能用於 enctype="multipart/form-data"。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM