PHP ziyaretçinin IP adresini kontrol özelliğini kod nasıl?

8 Cevap php

Ben hala bu konuda şaşkın ve PHP ile bir ziyaretçinin IP adresini kontrol etmek konusunda herhangi bir yardım ve referans isteyin.

Ben bunu göstermek için bir şey kod denemeden önce bir şey sormak tembel görünüyor biliyorum, ama şu anda, ben de onu bulmak için Googling duyuyorum. Umarım birileri genel geniş cevap ya da okumak için bazı linki verebilir?

Btw, biz bu gibi bazı özellik kod olduğunda dikkate alınması gereken nedir?

PS: Eğer Herkese çok teşekkür ederim. Bu aydınlatıcı tartışmalar oldu. Açıkçası, ben daha fazla bu saygı ziyade hakikat olarak cevap seçin. Bugüne kadar ben hala doğru bir bilmiyorum çünkü. Ben konunun kendisi bir firma anlayışı olsun önce belki öğrenme yıl daha ihtiyacımız var.

8 Cevap

Tamam, justjoe, ben bu argüman ile Şaşırdınız görmek ve onunla benim büyük parçası var.

Sizin için biraz daha açıklama.

Cevap göreve bağlıdır. 2 seçeneğiniz var:

Eğer tek bir IP adresine ihtiyacınız varsa, sadece REMOTE_ADDR ve başka bir şey kullanabilirsiniz. Web sunucusunun erişim günlüğüne bir göz atın: tek bir IP adresi ve bir REMOTE_ADDR bulunuyor. En azından size bir IP adresi geçerli garanti. Birçok durumda, bir trafik sayacı gibi, güvenebileceğiniz tek şey bu. Thes "bir IP adresi almak için nasıl" sorusuna genel bir cevaptır.

Muhtemelen daha hassas olabilir bir adres kaydetmek istiyorsanız - bu yüzden, kimse pek adresleri, olmayan bir kayıt sizi yasaklamaktadır. Ama tabii, sen bunun yerine, REMOTE_ADDR ile birlikte bu HTTP başlıklarını değil kaydetmek zorunda. Adreslerinin böyle bir kalabalık için bazı kullanımı yoktur. Ama çok fazla ona güvenemez. Eğer bakım Ama eğer, ondan bazı bilgiler kazmak.

FORWARDED_FOR başlığı için tek durum bu değişkenin içine gerçek IP adresini yerleştirmek bir yanlış web sunucusu vardır. Bu durumda, bir IP adresi olarak da kullanılabilir. Ama tabii öyle değil, genel bir öneri olarak, her özel durumda, elle yapılmalıdır. Bunun bir yanlış yapılandırma olabilir değil sadece ama yine de böyle bir web sunucusu çıkmak istiyorum.

Özel olarak ise, $_SERVER bakınız:

$_SERVER['REMOTE_ADDR'];

Eğer bu kullanmalısınız kullanıcının IP adresini almak için,

$ip = $_SERVER['REMOTE_ADDR']

General broad answer: everything PHP knows about client is stored in the $_SERVER variable. So, do this code everytime you want particular info to see if you can find something relevant:

echo "<pre>";
print_r($_SERVER);
echo "</pre>";
//or just
phpinfo(32);

$ _SERVER ['REMOTE_ADDR'] olan sadece bir "istemci adresi" olabilir ama IP address siz alabilirsiniz.

Değil müşterinin makine - müşteri bir proxy sunucusu üzerinden sörf ise, $_SERVER['REMOTE_ADDR'] sadece proxy sunucusunun IP adresini döndürür. Bu çok güvenilir değil. Bu daha iyi bir çözüm olabilir:

function get_ip_address() {
 foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) {
  if (array_key_exists($key, $_SERVER)) {
   foreach (explode(',', $_SERVER[$key]) as $ip) {
    $ip = trim($ip); // just to be safe
    if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) {
     self::$ip = $ip;
     return $ip;
    }
   }
  }
 }
}

This has already been discussed on Stack Overflow before. Please refer to “What is the most accurate way to retrieve a user’s correct IP address in PHP?”. Yukarıdaki kod bu sorunun kabul edilen yanıt optimize edilmiş bir versiyonu.

Ancak, IP adreslerini almak tamamen güvenilir asla olduğunu unutmayın: http://stackoverflow.com/questions/1672827/php-ajax-remote-addr-set-to-ip-of-bogus-network-adapter/1678748#1678748

Aşağıdaki amaca hizmet edecektir.

$ip = $_SERVER['REMOTE_ADDR'];

echo "IP address is : " :.$ip;

Senin yerini hesaplamak için bir jeo dönüştürücü bir üçüncü taraf IP adresi kullanmanızı öneririz. Eğer veritabanı alanı .. Doğruluk ve sorguları çıplak olmazdı beri.

Yapmanız gereken tüm gibi bir şey

http://third-party-url.com?ip=IP_ADDRESS

ve XML veya veri dizisini geri verir.

Size daha sonra istediklerini yapmak için kullanabilirsiniz.

Here are two websites which are popular. * My IP Address Lookup and GeoTargeting * SimpleGeo

Gibi pek çok site Belki başkaları buraya ekleyebilirsiniz .. vardır.

Sadece kod üstündeki bu kullanın:

if (function_exists('apache_request_headers'))
{
    $headers = apache_request_headers();

    if (array_key_exists('X-Forwarded-For', $headers))
    {
        $ips = explode(',',$headers['X-Forwarded-For'],2);
        $_SERVER["REMOTE_ADDR"]= trim($ips[0]);
    }
}

Kesinlikle $_SERVER["REMOTE_ADDR"] her zaman yük dengeleyici uygulamaları veya olmasın doğru IP adresini tutmak yapacaktır.