我目前正在使用google maps API处理地理编码php功能。奇怪的是,我认为file_get_contents()返回bool(false),而我使用的url是正确编码的。
在我的浏览器中,当我测试代码时,页面需要很长时间才能加载,并且地理编码不起作用(当然,鉴于API没有给我我想要的东西) )。
此外,我尝试使用卷曲,到目前为止没有成功。
如果有人能帮助我,那就太棒了!
非常感谢。
代码:
function test_geocoding2(){
$addr = "14 Boulevard Vauban, 26000 Valence";
if(!gc_geocode($addr)){
echo "false <br/>";
}
}
function gc_geocode($address){
$address = urlencode($address);
$url = "http://maps.google.com/maps/api/geocode/json?address={$address}";
$resp_json = file_get_contents($url);
$resp = json_decode($resp_json, true);
if($resp['status']=='OK'){
$lati = $resp['results'][0]['geometry']['location']['lat'];
$longi = $resp['results'][0]['geometry']['location']['lng'];
if($lati && $longi){
echo "(" . $lati . ", " . $longi . ")";
}else{
echo "data not complete <br/>";
return false;
}
}else{
echo "status not ok <br/>";
return false;
}
}
更新:问题确实是我在代理背后的事实。我测试了另一个网络,它运行正常。 但是,您对我返回的内容以及如何测试成功的答案也非常好,并且会帮助我改进代码。
非常感谢!
答案 0 :(得分:1)
查看if
声明:
if(!gc_geocode($addr)){
echo "false <br/>";
}
这意味着如果gc_geocode($addr)
返回false
或null
,则此语句将回显“false”。
但是,你实际上从来没有从函数中返回任何东西,所以一旦成功,它就会返回null
:
$address = urlencode($address);
$url = "http://maps.google.com/maps/api/geocode/json?address={$address}";
$resp_json = file_get_contents($url);
$resp = json_decode($resp_json, true);
if($lati && $longi){
echo "(" . $lati . ", " . $longi . ")"; //ECHO isn't RETURN
/* You should return something here, e.g. return true */
} else {
echo "data not complete <br/>";
return false;
}
} else {
echo "status not ok <br/>";
return false;
}
或者,您只需将if
语句更改为仅在函数返回false
时触发:
if(gc_geocode($addr)===false){
//...
答案 1 :(得分:1)
当你没有返回时,任何函数都会返回null
只需使用:
if(!is_null(gc_geocode($addr))) {
echo "false <br/>";
}
或者:
if(gc_geocode($addr) === false) {
echo "false <br/>";
}
答案 2 :(得分:1)
上面的函数gc_geocode()在我的系统上正常工作,没有任何额外的负载。你已经调用了gc_geocode()它返回你的lat,long是正确的,现在你已经检查了
if(!gc_geocode($addr)){
echo "false <br/>";
}
使用
if($responce=gc_geocode($addr)){
echo $responce;
}
else{
echo "false <br/>";
}
答案 3 :(得分:1)
问题是我使用代理的事实。代码是正确的。
要检查您和Internet之间是否有代理,您必须知道网络的基础结构。如果您在学校或公司网络中工作,则很可能使用代理来保护本地网络。 如果您不知道答案,询问您的网络管理员。
如果您的网络中没有声明的代理,仍然可能存在透明代理。但是,作为州对此问题的接受答案:https://superuser.com/questions/505772/how-can-i-find-out-if-there-is-a-proxy-between-myself-and-the-internet-if-there
如果它是透明代理,您将无法在客户端PC上检测到它。
有些网站也提供了一些代理检测器,但我不知道那里提供的信息有多相关。以下是两个例子: