2017-01-31 3 views
0

Ich hatte zuvor ein Google-Geocodierungsskript, das zum Extrahieren von Längen- und Breitengrad unter Verwendung lokaler Adressen in einer Datenbank arbeitete.URL nicht geladen Fehler bei Geocodierungsanfragen

In den letzten 6 Monaten habe ich Hosts gewechselt, und Google hat offenbar einen neuen Forward Geocoder implementiert. Jetzt gibt es nur den URL nicht laden Fehler aus dem XML-Skriptaufruf zurück.

Ich habe alles versucht, damit mein Code funktioniert. Selbst das Codieren von anderen Websites funktioniert nicht auf meinem Server. Was vermisse ich? Gibt es möglicherweise eine serverseitige Einstellung, die die ordnungsgemäße Ausführung blockiert?

Versuch # 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; 

gibt einfach url nicht geladen. Ich habe es mit und ohne den new_forwad_geocoder versucht. Ich habe es auch mit und ohne https versucht.

Die Zeichenfolge $ request_url liefert korrekte Ergebnisse, wenn Sie sie einfach kopieren und in einen Browser einfügen.

Auch versuchte dies nur um zu sehen, ob ich eine Datei zurückgeben konnte. Versuch 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; 

Eine Idee, was könnte den Verbindungsfehler verursachen?

Antwort

0

Ich konnte nie wieder mit XML arbeiten und der Aufruf file_get_contents war der Täter, ich bin fast positiv.

Ich habe geschrieben, was ich mit JSON/Curl (unten) zu arbeiten bekam, falls jemand ähnliche Probleme hat.

Letztendlich denke ich, dass die Probleme, auf die ich stieß, mit einem Upgrade auf unsere Apache-Version auf dem Server zu tun hatten; und einige der Standardeinstellungen, die sich auf file_get_contents und fopen beziehen, sind restriktiver. Ich habe das aber nicht bestätigt.

Dieser Code allerdings funktioniert:

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; 
Verwandte Themen