You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向PHP发送JSON格式POST请求时$_POST为空是什么原因?

问题原因

PHP的$_POST超全局变量默认仅会自动解析两类Content-Type的POST请求数据,自动填充到数组中:

  • application/x-www-form-urlencoded:普通HTML表单默认的POST提交格式
  • multipart/form-data:支持文件上传的表单POST提交格式

当你在Postman中选择JSON格式提交数据时,请求头的Content-Type为application/json,PHP不会自动解析这类请求体填充到$_POST,因此直接读取$_POST['nombre']会得到空值,无法进入对应判断分支。

修复方案

要获取JSON格式提交的POST参数,需要手动读取PHP原始请求输入流,再对JSON内容做解码处理,示例代码如下:

// 读取原始POST请求体内容
$rawRequest = file_get_contents('php://input');
// 将JSON格式的请求体解析为关联数组
$requestData = json_decode($rawRequest, true);

if( isset($requestData['nombre']) ){
    echo("Do thing");
}
else{
    echo("Error");
}

如果需要同时兼容普通表单提交、JSON提交两种场景,可以增加请求类型判断做兼容处理:

$requestData = $_POST;
// 检测当前请求是否为JSON格式提交
if (stripos($_SERVER['CONTENT_TYPE'], 'application/json') !== false) {
    $rawRequest = file_get_contents('php://input');
    $jsonData = json_decode($rawRequest, true);
    if (is_array($jsonData)) {
        $requestData = array_merge($requestData, $jsonData);
    }
}

if( isset($requestData['nombre']) ){
    echo("Do thing");
}
else{
    echo("Error");
}

注意:php://input是PHP提供的可读取原始请求体的只读流,在enctype="multipart/form-data"格式的请求中不可用,这类请求PHP已经自动处理填充到$_POST和$_FILES中,不需要手动读取。

内容的提问来源于stack exchange,提问作者Fran Pino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:00:52