Flutter调用本地PHP接口遇FormatException:响应为空问题求助
问题分析:Flutter调用PHP接口返回空Body仅在朋友设备出现
可能的原因及排查方向
1. 网络环境差异(WiFi vs 以太网)
- 跨网段/路由限制:你的PC和测试手机在以太网同网段,而朋友的笔记本WiFi和手机可能不在同一局域网子网,路由器未开启设备间互通,导致请求看似发送成功,但后端响应无法完整返回给手机,最终返回空内容。
排查:让朋友检查笔记本WiFi和手机的IP是否在同一网段(比如都是192.168.1.x);尝试关闭笔记本的防火墙,或在路由器上允许局域网内设备互访。 - WiFi网络拦截:部分家用路由器会默认拦截非标准端口的HTTP请求(如果接口未使用80/443端口),或开启了流量过滤规则,截断了响应内容。
排查:让朋友把PHP服务切换到80端口测试,或检查路由器的防火墙/安全设置。
2. PHP脚本执行异常(仅朋友环境触发)
- PHP版本不兼容:代码中使用了
str_contains函数,该函数仅PHP 8.0及以上版本支持。如果朋友的PHP版本低于8.0,这个函数会直接报错,脚本终止,无法执行到echo json_encode步骤,导致返回空内容。
排查:让朋友在终端执行php -v查看版本;若版本较低,将str_contains替换为兼容写法:strpos(strtolower($obj->nombre), strtolower($query)) !== false。 - 数据库数据编码问题:虽然数据库结构一致,但朋友的
clipro表中nombre字段可能包含非UTF-8编码的特殊字符(比如特殊符号、非英文字符),json_encode默认遇到这类字符会返回false,导致无输出内容。
排查:让朋友在PHP脚本中添加var_dump(json_encode($json));,查看是否返回false;若是,给json_encode加上参数JSON_UNESCAPED_UNICODE | JSON_PARTIAL_OUTPUT_ON_ERROR,或修复数据库数据的编码。 - 数据库连接失败:朋友的
connection.php可能配置错误(比如数据库用户名/密码写错,或主机地址用了127.0.0.1但MySQL绑定了局域网IP),导致数据库连接失败,$connectNow->query($sql)返回false,后续mysqli_num_rows($res)触发报错,脚本终止,无法输出JSON。
排查:让朋友在PHP脚本开头开启错误显示:error_reporting(E_ALL); ini_set('display_errors', 1);,访问接口查看是否有报错信息。
3. 请求URL或配置错误
- API地址配置错误:朋友的
API.search可能使用了笔记本的本地回环地址(127.0.0.1),而非局域网IP(比如192.168.1.xxx),导致手机无法访问后端服务,部分服务器会返回200状态码但空内容。
排查:让朋友确认API.search的IP是笔记本的局域网IP,而非127.0.0.1;用手机浏览器直接访问该URL+参数,查看是否能返回JSON。
内容的提问来源于stack exchange,提问作者mathiEs98
相关产品推荐
相关产品推荐

