PHP接收application/json格式POST请求时$_POST变量为空如何解决
问题根因
你发送的是Content-Type: application/json格式的POST请求,PHP的$_POST超全局变量仅会自动解析application/x-www-form-urlencoded、multipart/form-data两种格式的请求体,JSON格式的请求体不会被解析到$_POST中,因此拿到的参数为空。
修复方案
按以下步骤修改参数读取逻辑即可:
- 首先从PHP输入流读取原始JSON请求体
- 调用
json_decode将JSON字符串解析为PHP数组/对象 - 按需判断解析结果是否合法,避免报错
示例代码如下:
// 读取原始JSON请求体 $rawInput = file_get_contents('php://input'); // 第二个参数传true表示解析为关联数组 $requestData = json_decode($rawInput, true); // 判读解析是否成功、必填参数是否存在 if (json_last_error() !== JSON_ERROR_NONE || !isset($requestData['name'], $requestData['email'])) { // 可根据业务逻辑返回对应参数错误响应 die("Invalid request parameters"); } $name = $requestData['name']; $email = $requestData['email'];
临时验证方案
如果暂时不想修改后端代码,也可以直接调整Postman请求配置快速验证:
- 将请求体格式改为
form-data或者x-www-form-urlencoded - 填写对应的
name、email参数后发送请求,此时即可正常通过$_POST读取参数
内容的提问来源于stack exchange,提问作者DevAntho
相关产品推荐
相关产品推荐

