如何通过php获取clint IPv4地址

时间:2015-03-29 11:43:07

标签: php mysql

我整天尝试了各种方法来获取同一服务器中每个客户端的真实ID。所以我试着把ip作为id。

我使用php并希望在Mysql中注册用户ip也用于ip base投票系统。

但我很困惑如何为每个客户端获取IPv4地址。因为 起初我试着让我自己的ip进行测试。

在我的一台笔记本电脑上(在宽带连接细节处),我找到了:

Clint IPv4 address:  172.xx.xxx.333
Server IPv4 address: 172.xx.xxx.2

Whatismyipaddress.com show:  124.x.xxx.xx
My cPanel also show as same: 124.x.xxx.xx

另一台笔记本电脑在同一网络但连接不同:

Clint IPv4 address:  172.xx.yy.444
Server IPv4 address: 172.xx.yy.2

Whatismyipaddress.com show:  124.x.xxx.xx
My cPanel also show as same: 124.x.xxx.xx

所以我发现每台电脑的IPv4都不同。

现在,当我尝试获取IPv4地址时,我的每个代码都显示与whatismyip.com相同的互联网IP?

此处stackoverflow和google搜索中的所有方法都提供与whatismyip.com相同的结果。

我也找不到这个问题的任何好的或简单的答案。

方法1:

function get_client_ip()
{
  $ipaddress = '';
  if (getenv('HTTP_CLIENT_IP'))
      $ipaddress = getenv('HTTP_CLIENT_IP');
  else if(getenv('HTTP_X_FORWARDED_FOR'))
      $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
  else if(getenv('HTTP_X_FORWARDED'))
      $ipaddress = getenv('HTTP_X_FORWARDED');
  else if(getenv('HTTP_FORWARDED_FOR'))
      $ipaddress = getenv('HTTP_FORWARDED_FOR');
  else if(getenv('HTTP_FORWARDED'))
      $ipaddress = getenv('HTTP_FORWARDED');
  else if(getenv('REMOTE_ADDR'))
      $ipaddress = getenv('REMOTE_ADDR');
  else
      $ipaddress = 'UNKNOWN';

  return $ipaddress;
 }
 $ip = get_client_ip();
 echo $ip;

方法2:

function get_ip_address() {
$ip_keys = array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR');
foreach ($ip_keys as $key) {
    if (array_key_exists($key, $_SERVER) === true) {
        foreach (explode(',', $_SERVER[$key]) as $ip) {
            // trim for safety measures
            $ip = trim($ip);
            // attempt to validate IP
            if (validate_ip($ip)) {
                return $ip;
            }
        }
    }
}

return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : false;
}

function validate_ip($ip)
{
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) {
    return false;
}
return true;
}

$ip = get_ip_address();
echo $ip;

0 个答案:

没有答案