PHP не захватывает почтовый индекс от freegeoip.net - PullRequest
0 голосов
/ 26 апреля 2018

Сценарий, который у меня есть, работает до сих пор, чтобы вытащить IP, Lat и Long.Почтовый индекс не снимается.Я не могу понять, что сломано и что нужно, чтобы оно заработало.Есть идеи?

// Function to get the client ip address
function getUserIP()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}

$ipaddress = getUserIP();

$geoIP  = 
json_decode(file_get_contents("http://freegeoip.net/json/$ipaddress"), true);

$lat = $geoIP['latitude'];
$lon = $geoIP['longitude'];
$zip = $geoIP['zip'];

1 Ответ

0 голосов
/ 26 апреля 2018

Старая версия freegeoip устарела, а новая служба ipstack предлагает бесплатный доступ к API.Ниже приведен простой вызов curl, который получит необходимую информацию (и многое другое).

$url = 'http://api.ipstack.com/134.201.250.155?access_key=YOURKEY';  
$ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_HEADER, 0);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   

$output = curl_exec($ch);  

$api_result = json_decode($output, true); 

$lat = $api_result['latitude']; 
$lon = $api_result['longitude']; 
$zip = $api_result['zip'];

echo $zip;
echo $lat;
echo $lon;
...