Unity向PHP发送POST请求时出现token未定义索引错误如何解决
问题根因与解决方法
常见触发原因
- Unity请求头缺失导致PHP无法解析表单
部分Unity版本使用UnityWebRequest.Post传入WWWForm时,不会自动设置application/x-www-form-urlencoded的Content-Type请求头,PHP无法识别表单格式,不会把数据写入$_POST全局变量。
解决方法:发送请求前手动添加请求头:
UnityWebRequest www = UnityWebRequest.Post ("localhost/GenerateToken.php", form); // 新增这一行 www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded"); yield return www.SendWebRequest ();
- 服务端重定向导致POST参数丢失
如果站点配置了http跳转https、域名跳转、路径自动补全斜杠等301/302重定向规则,重定向过程中POST参数会被清空,请求方法会转为GET,自然无法从$_POST中拿到参数。
解决方法:将Unity中请求的地址替换为服务端的完整实际访问地址,避免触发重定向规则,比如补全http前缀:http://实际域名/GenerateToken.php。 - PHP未正确解析非标准提交数据
如果以上配置都没问题,可以在PHP端先读取原始请求体确认数据是否成功传到服务端:
// 临时添加调试代码,输出原始请求内容 $rawData = file_get_contents('php://input'); var_dump($rawData);
如果原始请求体中存在token参数,说明PHP没有自动解析成功,你可以自行解析原始数据,或者调整Unity端的提交格式适配PHP的解析规则。
优化建议
日常开发中建议先判断参数是否存在再读取,避免抛出Notice级错误:
$token = isset($_POST['token']) ? htmlspecialchars($_POST['token']) : '';
内容的提问来源于stack exchange,提问作者Jelke
相关产品推荐
相关产品推荐

