CodeIgniter项目中Google Maps Geocoding API调用受限及报错求助
解决CodeIgniter中Google地理编码API的QUERY_OVER_LIMIT与Undefined Offset问题
Hey there, let's fix these two issues you're facing with your CodeIgniter project step by step:
1. 先搞定 QUERY_OVER_LIMIT 错误
这个报错说明你触发了Google地理编码API的请求配额限制。现在Google的免费API配额非常有限,而且无API密钥的请求几乎无法正常使用了。你需要做这几件事:
- 登录Google Cloud Console,创建一个API密钥,然后启用「Geocoding API」服务
- 在你的请求URL中添加密钥参数,格式是
&key=你的API密钥 - 如果你的请求量较大,考虑升级到付费方案(Google有基础免费额度,超出后按实际用量计费)
2. 修复 Undefined offset: 0 错误
这个问题有两个直接诱因:
- 你代码里的条件判断用了赋值运算符
=而非比较运算符==,导致即使API返回非OK状态,代码依然会进入分支去访问$geo['results'][0],而此时results数组是空的 - 给
$latlng['lng']赋值时,错误地用了['lat'],应该取['lng']
修正后的完整代码
$address = $this->input->post('key'); // 替换成你自己的API密钥,同时修正API路径(原代码里的geoco/json是笔误,应该是geocode/json) $apiKey = '你的Google API密钥'; $geoUrl = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($address) . '&sensor=false&key=' . $apiKey; $geo = file_get_contents($geoUrl); $geo = json_decode($geo, true); // 这里用双等号做状态判断,而非赋值 if ($geo['status'] == 'OK') { $latlng['lat'] = $geo['results'][0]['geometry']['location']['lat']; // 修正lng的取值字段 $latlng['lng'] = $geo['results'][0]['geometry']['location']['lng']; echo json_encode($latlng); } else { // 返回具体错误状态方便调试,比只返回0更实用 echo json_encode(['error' => $geo['status']]); }
额外小提醒:file_get_contents可能会因为服务器配置禁用而失效,你可以考虑用CodeIgniter自带的CURL工具类或者Guzzle来发起请求,兼容性会更好。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

