Unity向PHP发送变量值失败报错,应如何排查解决
问题排查与修复方案
核心问题点
- 请求与数据不匹配:你创建了
WWWForm对象填充参数,但使用UnityWebRequest.Get方法发送请求,Get方法不会携带WWWForm内容,参数完全没有发送到PHP端。表单传参请改用UnityWebRequest.Post方法。 - 变量拼写隐患:类属性定义为
areOfCircle,和目标参数名areaOfCircle相比少了字母a,若通过代码赋值而非Inspector面板赋值,会出现参数为空问题。 - 本地HTTPS证书异常:本地使用
https://localhost测试通常没有合法SSL证书,Unity默认会拦截不安全的HTTPS请求抛出错误,本地测试建议改用http://localhost,或临时添加测试用的证书忽略逻辑。 - PHP端缺少参数接收逻辑:你给出的PHP代码直接使用
$areaOfCircle,没有接收前端传参的逻辑,需补充对应请求方式的参数接收代码,否则PHP会报变量未定义错误。
修正后的代码示例
Unity 脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Networking; public class SendToServer: MonoBehaviour { // 修正拼写错误 public string areaOfCircle; IEnumerator Start() { WWWForm form = new WWWForm(); form.AddField("areaOfCircle", areaOfCircle); // 改用Post方法传递表单,本地测试先换http UnityWebRequest www = UnityWebRequest.Post("http://localhost/sqlconnect/myFirstPhp.php", form); // 测试用忽略证书逻辑,正式环境请删除 www.certificateHandler = new CertHandler(); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { // 额外打印服务器返回内容,方便定位PHP端报错 Debug.LogError(www.error + " " + www.downloadHandler.text); } else { Debug.Log("发送成功,服务器返回:" + www.downloadHandler.text); } } } // 测试用证书忽略类,正式环境请删除 public class CertHandler : CertificateHandler { protected override bool ValidateCertificate(byte[] certificateData) { return true; } }
PHP 代码补充
// 接收Post请求传递的参数 $areaOfCircle = $_POST['areaOfCircle']; // 可选:添加参数非空校验避免报错 if(empty($areaOfCircle)) { die("参数areaOfCircle为空"); } // 原有的PDF渲染逻辑 ... $pdf->WriteFixedPosHTML($areaOfCircle, 20, 50, 20, 50, 'auto');
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

