2017-01-31 10 views
0

이전에 데이터베이스의 로컬 주소를 사용하여 경도 및 위도를 추출하는 Google 지오 코딩 스크립트가있었습니다.지오 코딩 요청에서 URL로드 오류가 발생했습니다.

호스트를 전환 한 지 6 개월 만에 Google이 새 포워드 지오 코더를 구현 한 것 같습니다. 이제 xml 스크립트 호출에서 URL을로드하지 않는 url을 반환합니다.

나는 코드 작업을 위해 모든 것을 시도했다. 다른 웹 사이트의 샘플 코딩조차도 내 서버에서 작동하지 않습니다. 내가 뭘 놓치고 있니? 이것이 제대로 실행되는 것을 막는 서버 측 설정이 있습니까?

시도 # 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; 

연결 실패의 원인은 무엇입니까?

답변

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;