php文件_get_contents()返回false和有效url

php文件_get_contents()返回false和有效url,php,api,google-maps,geocoding,Php,Api,Google Maps,Geocoding,我目前正在使用GoogleMapsAPI开发一个地理编码php函数。奇怪的是,file_get_contents()返回bool(false),而我使用的url是正确编码的 在我的浏览器中,当我测试代码时,页面需要很长时间才能加载,地理编码也不起作用(当然,考虑到API不能满足我的需求) 我也试着使用curl,到目前为止没有成功 如果有人能帮我,那太好了 非常感谢 守则: function test_geocoding2(){ $addr = "14 Boulevard Vauban,

我目前正在使用GoogleMapsAPI开发一个地理编码php函数。奇怪的是,file_get_contents()返回bool(false),而我使用的url是正确编码的

在我的浏览器中,当我测试代码时,页面需要很长时间才能加载,地理编码也不起作用(当然,考虑到API不能满足我的需求)

我也试着使用curl,到目前为止没有成功

如果有人能帮我,那太好了

非常感谢

守则:

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;
    }
}
功能测试\u地理编码2(){
$addr=“沃邦大道14号,26000瓦伦斯”;
如果(!gc_地理编码($addr)){
回声“假
”; } } 函数gc\u地理编码($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); 如果($resp['status']=='OK'){ $lati=$resp['results'][0]['geometry']['location']['lat']; $longi=$resp['results'][0]['geometry']['location']['lng']; 如果($lati&&$longi){ 回声“(“$lati.”,“$longi.”); }否则{ 回显“数据不完整
”; 返回false; } }否则{ 回显“状态不正常
”; 返回false; } }
更新:问题确实是我在一个代理背后。我用另一个网络进行了测试,它工作正常。 但是,您对我返回的内容以及如何测试成功的回答也非常好,这将帮助我改进代码


非常感谢

看看
if
语句:

if(!gc_geocode($addr)){
    echo "false <br/>";
}
或者,您可以将
if
语句更改为仅在函数返回
false
时激发:

if(gc_geocode($addr)===false){
    //...

不返回任何内容时,函数返回
null

就用这个:

if(!is_null(gc_geocode($addr))) {
    echo "false <br/>";
}
if(!is_null(gc_地理编码($addr))){
回声“假
”; }
或:

if(gc\u地理编码($addr)==false){
回声“假
”; }
以上函数gc\u geocode()在我的系统上正常工作,没有任何额外负载。您已经调用了gc_geocode(),它会返回lat,long,这是正确的,现在您已经完成了检查

if(!gc_geocode($addr)){
    echo "false <br/>";
} 
if(!gc_地理编码($addr)){
回声“假
”; }
使用

  if($responce=gc_geocode($addr)){
      echo $responce;       
    }
  else{
     echo "false <br/>";
    } 
if($response=gc\u地理编码($addr)){
回声$responce;
}
否则{
回声“假
”; }
问题在于我使用的是代理。代码是正确的

要检查您与Internet之间是否存在代理,您必须了解网络的基础结构。如果您在学校或公司网络工作,很可能会使用代理来保护本地网络。 如果您不知道答案,请询问网络管理员

如果网络中没有声明的代理,仍然可能存在透明代理。然而,正如对这一问题的公认答案所述:

如果它是透明代理,您将无法在客户端PC上检测到它

一些网站也提供了一些代理检测器,尽管我不知道那里提供的信息有多重要。以下是两个例子:


您很可能正在使用internet代理。在函数
gc\u geocode()
中,除了
false
之外,您永远不会返回任何内容。。。如果(gc_geocode($addr)==false),您可以
echo
其他内容,但永远不会返回
true
afterwardsTry
if(gc_geocode($addr)==false)
if(!gc_geocode($addr)){
    echo "false <br/>";
} 
  if($responce=gc_geocode($addr)){
      echo $responce;       
    }
  else{
     echo "false <br/>";
    }