Salı, Mayıs 08, 2018

Php IP den Konum Bulmak

  Hiç yorum yok


Merhaba arkadaş bu gün sizlere kullanıcılarınız sitenize girdiğini zaman ip adresini alıp bu ip adresi üzerinden nasıl konumlarını bulabileceğinizi göstereceğim.

Bunun için ilk olarak ip adresini bulmamız lazım bunun için aşağıdaki fonksiyonu kullanabilirsiniz.

function ipbul(){
 if(getenv("HTTP_CLIENT_IP")) {
   $ip = getenv("HTTP_CLIENT_IP");
  } elseif(getenv("HTTP_X_FORWARDED_FOR")) {
   $ip = getenv("HTTP_X_FORWARDED_FOR");
   if (strstr($ip, ',')) {
    $tmp = explode (',', $ip);
    $ip = trim($tmp[0]);
   }
  } else {
  $ip = getenv("REMOTE_ADDR");
  }
 return $ip;
}
Bu fonksiyonu kullanmak için örneğin ; echo ipbul(); kodunu kullanabilirsiniz. Sitenize giriş yapan kullanıcıya ip adresini gösterecektir.

Şimdi gelelim konum bilgilerini nereden alacağız ?

function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) {
    $output = NULL;
    if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
        $ip = $_SERVER["REMOTE_ADDR"];
        if ($deep_detect) {
            if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
    }
    $purpose    = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose)));
    $support    = array("country", "countrycode", "state", "region", "city", "location", "address");
    $continents = array(
        "AF" => "Africa",
        "AN" => "Antarctica",
        "AS" => "Asia",
        "EU" => "Europe",
        "OC" => "Australia (Oceania)",
        "NA" => "North America",
        "SA" => "South America"
    );
    if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
        $ipdat = @json_decode(file_get_contents("http://ip-api.com/json/" . $ip));
        if (@strlen(trim($ipdat->countryCode)) == 2) {
            switch ($purpose) {
                case "location":
                    $output = array(
                        "city"           => @$ipdat->city,
                        "state"          => @$ipdat->regionName,
                        "country"        => @$ipdat->countryName,
                        "country_code"   => @$ipdat->countryCode,
                        "continent"      => @$continents[strtoupper($ipdat->continentCode)],
                        "continent_code" => @$ipdat->continentCode
                    );
                    break;
                case "address":
                    $address = array($ipdat->countryName);
                    if (@strlen($ipdat->regionName) >= 1)
                        $address[] = $ipdat->regionName;
                    if (@strlen($ipdat->city) >= 1)
                        $address[] = $ipdat->city;
                    $output = implode(", ", array_reverse($address));
                    break;
                case "city":
                    $output = @$ipdat->city;
                    break;
                case "state":
                    $output = @$ipdat->regionName;
                    break;
                case "region":
                    $output = @$ipdat->regionName;
                    break;
                case "country":
                    $output = @$ipdat->countryName;
                    break;
                case "countrycode":
                    $output = @$ipdat->countryCode;
                    break;
            }
        }
    }
    return $output;
}
Yukarıdaki kod sayesinde "http://ip-api.com/json/" sitesine bağlanıyor ve ilk olarak yaptığımız ip bulma işlemi sayesinde kullanıcının ip adresinden nerede olduğunu bulabiliyoruz.

Bu eklediğimiz ikinci fonksiyon peki nasıl kullanılıyor

echo ip_info("Visitor","city"); komutu ile sitenize giriş yapan kullanıcının hangi şehider olduğunu bulabilirsiniz.

Visitor ün yanındaki city yi "regionName" , "countryCode" gibi şeyler yaparak diğer bildiğilerini de alabilirsiniz.
Eğer bu yazıyı beğendiyseniz aşağıdaki butonlar ile paylaşabilirsiniz.

Hiç yorum yok :

Yorum Gönder