Bir IP adresinden yerini alma

14 Cevap php

Ben kendi konumuna göre benim web sayfasını özelleştirebilirsiniz böylece, şehir, eyalet, ve kendi IP adresinden bir ziyaretçinin ülke gibi bilgileri almak istiyorum. PHP bunu yapmak için iyi ve güvenilir bir yolu var mı? Ben veritabanı için istemci tarafı komut dosyası, sunucu tarafı komut dosyası için PHP, MySQL için JavaScript kullanıyorum.

14 Cevap

Ücretsiz bir GeolP veritabanı indirmek ve yerel IP adresi arama, ya da bir üçüncü taraf hizmeti kullanmak ve uzaktan arama gerçekleştirmek olabilir olabilir. Bu hiçbir kurulum gerektirir, basit seçenek, ancak ek gecikme tanıtmak gelmez.

Kullandığınız verebilecek bir üçüncü taraf servis http://ipinfo.io. Bunlar ana bilgisayar adı, coğrafi konumu, ağ sahibi ve ek bilgiler, örneğin sağlar:

$ curl ipinfo.io/8.8.8.8
{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "loc": "37.385999999999996,-122.0838",
  "org": "AS15169 Google Inc.",
  "city": "Mountain View",
  "region": "CA",
  "country": "US",
  "phone": 650
}

Burada bir PHP örnek:

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
echo $details->city; // -> "Mountain View"

Ayrıca istemci tarafı kullanabilirsiniz. Burada basit bir jQuery örnek:

$.get("http://ipinfo.io", function(response) {
    console.log(response.city);
}, "jsonp");

ve daha detaylı bir JavaScript, örneğin: http://jsfiddle.net/zK5FN/2/

Sen "geo-ip" daha fazla sonuç alabilirsiniz için arama google eğer ... gibi http://www.hostip.info/ gibi harici servisini kullanmak gerekir.

Host-IP API sizin ihtiyaçlarınıza bağlı olarak ya PHP veya JavaScript kullanabilirsiniz, böylece HTTP tabanlı olduğunu.

Kimse bu özel API hakkında bilgiler verdik gibi görünüyor ben sonrası düşündüm. Ama sonra yaşıyorum ve bunu birden fazla formatları dönmek alabilirsiniz tam olarak ne dönen json, xml and csv.

 $location = file_get_contents('http://freegeoip.net/json/'.$_SERVER['REMOTE_ADDR']);
 print_r($location);

Bu size mümkün istiyorum olabilir şeylerin hepsini verecektir:

{
      "ip": "77.99.179.98",
      "country_code": "GB",
      "country_name": "United Kingdom",
      "region_code": "H9",
      "region_name": "London, City of",
      "city": "London",
      "zipcode": "",
      "latitude": 51.5142,
      "longitude": -0.0931,
      "metro_code": "",
      "areacode": ""

}

I'll make the same answer I did here hizmet PHP için kullanılabilir aynı zamanda:

I like the free GeoLite City from Maxmind which works for most applications and from which you can upgrade to a paying version if it's not precise enough. There is a PHP API included, as well as for other languages. And if you are running Lighttpd as a webserver, you can even use a module to get the information in the SERVER variable for every visitor if that's what you need.

I should add there is also a free Geolite Country (which would be faster if you don't need to pinpoint the city the IP is from) and Geolite ASN (if you want to know who owns the IP) and that finally all these are downloadable on your own server, are updated every month and are pretty quick to lookup with the provided APIs as they state "thousands of lookups per second".

Google API'leri kullanarak:

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script>
contry_code = google.loader.ClientLocation.address.country_code
city = google.loader.ClientLocation.address.city
region = google.loader.ClientLocation.address.region
</script>

Eğer kendiniz yapmak istiyorum ve diğer sağlayıcılar güvenmemeniz varsayarsak, IP2Nation bölgesel kayıt gözüne olarak güncellenir eşlemeleri bir MySQL veritabanı sağlar.

Aşağıdaki Ben kullanımları http://ipinfodb.com/ip_locator.php kendi bilgi almak için bulundu parçacığını değiştirilmiş bir versiyonu. Unutmayın, siz de onlarla birlikte bir API anahtarı için geçerli ve uygun gördüğünüz gibi verilen bilgi almak için doğrudan API kullanabilirsiniz.

Snippet

function detect_location($ip=NULL, $asArray=FALSE) {
    if (empty($ip)) {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }
        elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }
        else { $ip = $_SERVER['REMOTE_ADDR']; }
    }
    elseif (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost') {
        $ip = '8.8.8.8';
    }

    $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
    $i = 0; $content; $curl_info;

    while (empty($content) && $i < 5) {
        $ch = curl_init();
        $curl_opt = array(
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_HEADER => 0,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_URL => $url,
            CURLOPT_TIMEOUT => 1,
            CURLOPT_REFERER => 'http://' . $_SERVER['HTTP_HOST'],
        );
        if (isset($_SERVER['HTTP_USER_AGENT'])) $curl_opt[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
        curl_setopt_array($ch, $curl_opt);
        $content = curl_exec($ch);
        if (!is_null($curl_info)) $curl_info = curl_getinfo($ch);
        curl_close($ch);
    }

    $araResp = array();
    if (preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs)) $araResp['city'] = trim($regs[1]);
    if (preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs)) $araResp['state'] = trim($regs[1]);
    if (preg_match('{<li>Country : ([^<]*)}i', $content, $regs)) $araResp['country'] = trim($regs[1]);
    if (preg_match('{<li>Zip or postal code : ([^<]*)</li>}i', $content, $regs)) $araResp['zip'] = trim($regs[1]);
    if (preg_match('{<li>Latitude : ([^<]*)</li>}i', $content, $regs)) $araResp['latitude'] = trim($regs[1]);
    if (preg_match('{<li>Longitude : ([^<]*)</li>}i', $content, $regs)) $araResp['longitude'] = trim($regs[1]);
    if (preg_match('{<li>Timezone : ([^<]*)</li>}i', $content, $regs)) $araResp['timezone'] = trim($regs[1]);
    if (preg_match('{<li>Hostname : ([^<]*)</li>}i', $content, $regs)) $araResp['hostname'] = trim($regs[1]);

    $strResp = ($araResp['city'] != '' && $araResp['state'] != '') ? ($araResp['city'] . ', ' . $araResp['state']) : 'UNKNOWN';

    return $asArray ? $araResp : $strResp;
}

To Use

detect_location();
//  returns "CITY, STATE" based on user IP

detect_location('xxx.xxx.xxx.xxx');
//  returns "CITY, STATE" based on IP you provide

detect_location(NULL, TRUE);    //   based on user IP
//  returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" }

detect_location('xxx.xxx.xxx.xxx', TRUE);   //   based on IP you provide
//  returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" }

: Ayrıca "akıllı-ip" servisini kullanabilirsiniz

$.getJSON("http://smart-ip.net/geoip-json?callback=?",
    function (data) {
        alert(data.countryName);
        alert(data.city);
    }
);

PHP sahip bir extension for that.

PHP.net Gönderen:

The GeoIP extension allows you to find the location of an IP address. City, State, Country, Longitude, Latitude, and other information as all, such as ISP and connection type can be obtained with the help of GeoIP.

Örneğin:

$record = geoip_record_by_name($ip);
echo $record['city'];

Google, AJAX APIs içinde konum belirleme işlevleri vardır.

Yorum eklemek ama google API için açılamıyor: https://developers.google.com/gears/ -> Google Gears API artık mevcuttur. İlginiz için teşekkür ederiz.

I wrote this article few months ago and might be helpful for you. The article describes on the usage of open source database of ip 2 country and also describes about a php class that I wrote to get that open source database working. Here is the link
http://www.samundra.com.np/find-visitors-country-using-his-ip-address/1018

Bu regardin herhangi bir yardıma ihtiyacınız varsa bana sitede yorum bırakın lütfen.

Bu size yardımcı olur umarım.

JSON olarak sizin adresinizi döndüren www.iptolatlng.com sahipsiniz.