2016-06-22 2 views
1

В настоящее время я работаю над функцией php геокодирования, используя API карт google. Как ни странно, file_get_contents() возвращает bool (false), тогда как URL-адрес, который я использую, правильно закодирован, я думаю.php file_get_contents() возвращает 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; 
    } 
} 

UPDATE: Проблема действительно была в том, что я был за прокси-сервером. Я тестировал другую сеть, и она работает правильно. Тем не менее, ваши ответы о том, что я возвращаю и как я проверяю успех, тоже очень приятны и помогут мне улучшить код.

Большое спасибо!

+1

Скорее всего, вы используете какое-то прокси-сервер для Интернета. http://stackoverflow.com/questions/5211887/how-to-use-curl-via-a-proxy – Ali

+0

Вы никогда не возвращаете ничего, кроме 'false' в функцию' gc_geocode() '... you' echo' другие вещи, но никогда не возвращать 'true' после этого – Ben

+1

Попробуйте' if (gc_geocode ($ addr) === false) ' –

ответ

1

Проблема была тот факт, что я использовал прокси , Код правильный.

Чтобы проверить, существует ли прокси-сервер между вами и Интернетом, вы должны знать инфраструктуру своей сети. Если вы работаете в школе или в сети компании, очень вероятно, что прокси-сервер используется для защиты локальной сети. Если вы не знаете ответа, спросите своего администратора сети.

Если в вашей сети нет прокси-сервера, все еще возможно, что прозрачный прокси-сервер. Однако, как утверждает принятый ответ на этот вопрос: https://superuser.com/questions/505772/how-can-i-find-out-if-there-is-a-proxy-between-myself-and-the-internet-if-there

Если это прозрачный прокси-сервер, вы не сможете его обнаружить на клиентском ПК.

Некоторые веб-сайты также предоставляют некоторые детекторы прокси, хотя я не знаю, насколько релевантна информация, предоставленная там. Вот два примера:

http://amibehindaproxy.com/

http://www.proxyserverprivacy.com/free-proxy-detector.shtml

1

Посмотрите на if заявление:

if(!gc_geocode($addr)){ 
    echo "false <br/>"; 
} 

Это означает, что если gc_geocode($addr) возвращает либо false или null, это утверждение будет эхо «ложь».

Однако, вы никогда на самом деле ничего возвращать из функции, так что в случае успеха, это возвращение 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

Когда вы не возвращаете ничего, возвращается функция null.
Просто используйте, что:

if(!is_null(gc_geocode($addr))) { 
    echo "false <br/>"; 
} 

Или:

if(gc_geocode($addr) === false) { 
    echo "false <br/>"; 
} 
1

Над функцией gc_geocode() работает должным образом на моей системе, без какой-либо дополнительной нагрузки. Вы назвали gc_geocode() возвращает вас Lat, давно это правильно теперь вы проверить через

if(!gc_geocode($addr)){ 
    echo "false <br/>"; 
} 

Использование

if($responce=gc_geocode($addr)){ 
     echo $responce;  
    } 
    else{ 
    echo "false <br/>"; 
    } 
Смежные вопросы