Url未在地理编码请求中加载错误

时间:2017-01-31 19:53:01

标签: php xml geocode google-geocoding-api

我之前有一个Google地理编码脚本,用于使用数据库中的本地地址提取经度和纬度。

在过去的6个月里,我已经切换了主机,显然Google已经实施了一个新的前向地理编码器。现在它只是从xml脚本调用返回url not loading error。

我已经尝试了一切来让我的代码正常运行。即使来自其他网站的样本编码也无法在我的服务器上运行。我错过了什么?可能是服务器端设置阻止它正常执行吗?

尝试#1:

$request_url = "http://maps.googleapis.com/maps/api/geocode/xml?new_forward_geocoder=true&address=1600+Amphitheatre+Parkway,+Mountain+View,+CA";
echo $request_url;
$xml = simplexml_load_file($request_url) or die("url not loading");
$status = $xml->status;
return $status;

只需返回url而不加载。我曾尝试使用和不使用new_forwad_geocoder。我也尝试过使用和不使用https。

$ request_url字符串如果您只是将其复制并粘贴到浏览器,则会返回正确的结果。

还试过这只是为了看看我是否可以获得一个文件返回。尝试2:

$request_url = "http://maps.googleapis.com/maps/api/geocode/json?new_forward_geocoder=true&address=1600+Amphitheatre+Parkway,+Mountain+View,+CA";//&sensor=true
echo $request_url."<br>";
$tmp = file_get_contents($request_url);
echo $tmp;

知道什么可能导致连接失败?

1 个答案:

答案 0 :(得分:0)

我再也无法使用XML了,而file_get_contents调用是罪魁祸首我几乎是正面的。

我已经发布了我使用JSON / Curl(下面)工作的内容,以防任何人遇到类似问题。

最终我认为我遇到的问题与在服务器上升级到我们的Apache版本有关;和一些与file_get_contents和fopen相关的默认设置更具限制性。我虽然没有证实这一点。

此代码确实有效:

class geocoder{
    static private $url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=";

    static public function getLocation($address){
        $url = self::$url.$address;

        $resp_json = self::curl_file_get_contents($url);
        $resp = json_decode($resp_json, true);
        //var_dump($resp);
        if($resp['status']='OK'){
          //var_dump($resp['results'][0]['geometry']['location']);
            //echo "<br>";
            //var_dump($resp['results'][0]['geometry']['location_type']);
            //echo "<br>";
            //var_dump($resp['results'][0]['place_id']);

            return array ($resp['results'][0]['geometry']['location'], $resp['results'][0]['geometry']['location_type'], $resp['results'][0]['place_id']);
        }else{
            return false;
        }
    }

    static private function curl_file_get_contents($URL){
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);

        if ($contents) return $contents;
            else return FALSE;
    }
}

$Address = "1600 Amphitheatre Parkway, Mountain View, CA";
$Address = urlencode(trim($Address));

list ($loc, $type, $place_id) = geocoder::getLocation($Address);
//var_dump($loc);
$lat = $loc["lat"];
$lng = $loc["lng"];
echo "<br><br> Address: ".$Address;
echo "<br>Lat: ".$lat;
echo "<br>Lon: ".$lng;
echo "<br>Location: ".$type;
echo "<br>Place ID: ".$place_id;