php读取php://input的json数据需确保content-type为application/json且请求体为纯json,用file_get_contents('php://input')读取后经json_decode解析为关联数组,并检查空值与解析错误。

PHP 中读取 php://input 的 JSON 数据,核心是:确保请求体是纯 JSON 格式(如 Content-Type: application/json),然后用 file_get_contents('php://input') 获取原始数据,再用 json_decode() 解析。
确认请求方式和 Content-Type
前端必须以 POST(或 PUT/DELETE 等)方式发送 JSON 字符串,并设置请求头:
Content-Type: application/json- 请求体为合法 JSON,例如:
{"name":"张三","age":25} - 不要用表单提交(
application/x-www-form-urlencoded)或 FormData,否则php://input可能为空或格式不匹配
PHP 端读取并解析 JSON
在 PHP 脚本中按顺序执行以下操作:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 用
file_get_contents('php://input')读取原始输入流(注意:只能读一次) - 检查是否为空,避免空字符串导致
json_decode返回null - 调用
json_decode($data, true)转为关联数组(第二个参数设为true更常用) - 检查
json_last_error()判断解析是否成功
示例代码:
$data = file_get_contents('php://input');
if (empty($data)) {
http_response_code(400);
echo json_encode(['error' => 'No input data']);
exit;
}
$json = json_decode($data, true);
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400);
echo json_encode(['error' => 'Invalid JSON format']);
exit;
}
// 此时 $json 是关联数组,可直接使用
$name = $json['name'] ?? '';
$age = $json['age'] ?? 0;
常见问题提醒
-
不能同时用
$_POST:当Content-Type是application/json时,PHP 不会自动解析到$_POST,它保持为空 -
Apache + mod_php 下,
php://input在 enctype 为 multipart 时不可用:上传文件时别混用 JSON 和文件字段 -
调试技巧:打印
getallheaders()查看实际请求头,用var_dump($data)确认读到的原始内容
补充:兼容 GET 请求传 JSON(不推荐但偶有需要)
如果 JSON 是通过 URL 参数(如 ?data=%7B%22name%22%3A%22abc%22%7D)传递,应改用 $_GET['data'] 并 urldecode 后解析,而不是读 php://input —— 因为 GET 没有请求体。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










