登录
首页 >  文章 >  php教程

PHP正确接收JSON数据的方法

时间:2026-01-01 08:54:48 310浏览 收藏

大家好,我们又见面了啊~本文《PHP接收JSON数据的正确方法》的内容中将会涉及到等等。如果你正在学习文章相关知识,欢迎关注我,以后会给大家带来更多文章相关文章,希望我们能一起进步!下面就开始本文的正式内容~

PHP需手动读取php://input并json_decode(true)解析JSON请求体,校验Content-Type,注意php://input仅可读一次且不与multipart/form-data共存。

PHP怎么接收前端传的JSON数据_处理applicationjson格式数据方法【详解】

PHP 默认不会自动解析 application/json 请求体,必须手动读取并解码,否则 $_POST 为空、$_REQUEST 也拿不到数据。

如何正确读取原始 JSON 请求体

前端以 Content-Type: application/json 发送数据(比如 fetch()axios.post()),PHP 不会像处理表单那样自动填充超全局变量。必须用 php://input 流读取原始请求体:

$json = file_get_contents('php://input');
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    http_response_code(400);
    echo json_encode(['error' => 'Invalid JSON']);
    exit;
}

注意:php://input 只能读一次,且不能和 enctype="multipart/form-data" 共存;如果已调用过 file_get_contents('php://input'),后续再读会返回空字符串。

json_decode() 的关键参数与常见坑

第二个参数设为 true 才返回关联数组(否则是对象),这对后续用 $data['key'] 访问至关重要:

  • json_decode($json) → 返回 stdClass 对象,需用 ->key
  • json_decode($json, true) → 返回数组,支持 ['key']isset($data['key'])
  • 若 JSON 含中文或特殊字符,确保传入的字符串是 UTF-8 编码,否则 json_decode() 返回 null
  • PHP 7.3+ 支持 JSON_THROW_ON_ERROR,可改用异常方式捕错:json_decode($json, true, 512, JSON_THROW_ON_ERROR)

验证请求头是否真的是 application/json

不能只依赖前端声明,服务端应主动校验,避免被绕过或误处理:

$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
if (strpos($contentType, 'application/json') !== 0) {
    http_response_code(415);
    echo json_encode(['error' => 'Content-Type must be application/json']);
    exit;
}

注意:$_SERVER['CONTENT_TYPE'] 在 Apache 下可用,Nginx 需确保配置中透传了该头(如 fastcgi_pass_request_headers on;),否则可能为空。

与 POST 表单共存时的兼容性处理

有些接口既要支持 JSON,也要兼容传统 application/x-www-form-urlencoded,可以统一入口判断:

$input = file_get_contents('php://input');
if (!empty($input) && strpos($_SERVER['CONTENT_TYPE'] ?? '', 'application/json') === 0) {
    $data = json_decode($input, true) ?: [];
} else {
    $data = $_POST; // 包含表单字段
}

这种写法简单直接,但要注意:一旦用了 php://input,就不能再依赖 $_POST 解析 JSON;反过来,如果已触发过表单解析(如通过 parse_str() 或访问过 $_POST),php://input 就不可再读 —— 这个顺序和互斥关系最容易被忽略。

终于介绍完啦!小伙伴们,这篇关于《PHP正确接收JSON数据的方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>