ndlli 发表于 2015-8-30 08:45:41

PHP获取访问用户IP

  php 获取本机外网/公网IP 大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP,
但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。
经过我的研究有两种方法来获取用户的真实外网IP。
  方法一:curl


代码



function get_onlineip() {
    $ch = curl_init('http://www.ip138.com/ip2city.asp');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $a= curl_exec($ch);
    preg_match('/\[(.*)\]/', $a, $ip);
    return $ip;
}
  
  
  方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址


代码



function get_onlineip() {
    $onlineip = '';
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
      $onlineip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
      $onlineip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
      $onlineip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
      $onlineip = $_SERVER['REMOTE_ADDR'];
    }
    return $onlineip;
}
  
页: [1]
查看完整版本: PHP获取访问用户IP