PHP接收POST变量异常:两种方式均无法获取$_POST['token']的值
问题原因及解决方案
两种取值方式分别对应不同的POST请求Content-Type,请先确认Insomnia发送请求时的内容格式,再对应排查:
场景1:发送的是JSON格式请求(Content-Type: application/json)
该场景下PHP不会自动解析内容到$_POST全局变量,只能通过php://input读取原始内容解析,排查步骤:
- 先打印原始输入确认内容是否正常:
public function actionGetuserbytoken() { // 先输出原始请求体看有没有正确的JSON内容 var_dump(file_get_contents("php://input")); exit; } - 如果原始内容正常,检查JSON解析是否报错:
public function actionGetuserbytoken() { $raw = file_get_contents("php://input"); $data = json_decode($raw, TRUE); // 解析失败时输出错误信息 if (json_last_error() !== JSON_ERROR_NONE) { return json_last_error_msg(); } return $data['token'] ?? 'token字段不存在'; } - 确认JSON串中的键名大小写、拼写完全匹配
token,没有多余空格或符号。
场景2:发送的是表单格式请求(Content-Type: application/x-www-form-urlencoded / multipart/form-data)
该场景下参数会自动解析到$_POST中,排查步骤:
- 检查Insomnia中表单参数的键名是否完全匹配
token,没有拼写错误、前后空格 - 确认PHP配置
post_max_size值大于当前请求的内容大小,内容超限时$_POST会被置空 - 如果使用了PHP开发框架,部分框架会拦截原生全局请求参数,需要调用框架提供的请求方法获取参数,比如Laravel中用
request()->post('token'),ThinkPHP中用$this->request->post('token')
内容的提问来源于stack exchange,提问作者Daniel R
相关产品推荐
相关产品推荐

