• PHP 关于获取客户端ip的方法


    <?php 
    
    /**
     * 获取ip地址的方法
     */
    
    // 1:
    function getip() {
      static $ip = '';
      $ip = $_SERVER['REMOTE_ADDR'];
    
      if(isset($_SERVER['HTTP_CDN_SRC_IP'])) {
        $ip = $_SERVER['HTTP_CDN_SRC_IP'];
    
      } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    
      } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#d{1,3}.d{1,3}.d{1,3}.d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
        foreach ($matches[0] AS $xip) {
          if (!preg_match('#^(10|172.16|192.168).#', $xip)) {
            $ip = $xip;
            break;
          }
        }
    
      }
      return $ip;
    }
    
    echo getip().'<hr>';
    
    
    // 2:
    error_reporting (E_ERROR | E_WARNING | E_PARSE);
    
    if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]){
    
        $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
    
    }elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]){
    
        $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
    
    }elseif($HTTP_SERVER_VARS["REMOTE_ADDR"]){
    
        $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
    
    }elseif(getenv("HTTP_X_FORWARDED_FOR")){
    
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    
    }elseif(getenv("HTTP_CLIENT_IP")){
    
        $ip = getenv("HTTP_CLIENT_IP");
    
    }elseif(getenv("REMOTE_ADDR")){
    
        $ip = getenv("REMOTE_ADDR");
    
    }else{
    
        $ip = "Unknown";
    }
    
    echo $ip.'<hr>';
    
    
    // 3:
    $ip=$_SERVER['REMOTE_ADDR'];
    
    echo $ip.'<hr>';
    
    
    // 4:
    $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
    
    $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
    
    echo $user_IP.'<hr>';
    
    
    // 5:
    function get_real_ip(){
    
        $ip=false;
        if(!empty($_SERVER["HTTP_CLIENT_IP"])){
    
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
    
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    
            $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
    
            if($ip){
    
                array_unshift($ips, $ip); $ip = FALSE;
            }
    
            for($i = 0; $i < count($ips); $i++){
    
                if(!eregi("^(10|172.16|192.168).", $ips[$i])){
    
                    $ip = $ips[$i];
                    break;
                }
    
            }
    
        }
    
        return($ip ? $ip : $_SERVER['REMOTE_ADDR']);
    }
    
    echo get_real_ip().'<hr>';
    
    
    // 6:
    if(getenv('HTTP_CLIENT_IP')){
    
        $onlineip = getenv('HTTP_CLIENT_IP');
        
    }elseif(getenv('HTTP_X_FORWARDED_FOR')){
    
        $onlineip = getenv('HTTP_X_FORWARDED_FOR');
    
    }elseif(getenv('REMOTE_ADDR')){
    
        $onlineip = getenv('REMOTE_ADDR');
    
    }else{
    
        $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
    }
    
    echo $onlineip.'<hr>';
     ?>

    如果访问者使用了代理或者是其它的情况,所取得的ip可能并不是真正的客户端ip

  • 相关阅读:
    实际项目管理-1
    arcengine 错误
    一些视频技术类网站
    winform 组件之dotnetbar10.5.3
    winform 弹框的组件
    一个好的开源网站
    写webservice 注意点
    ww
    js
    瀑布流
  • 原文地址:https://www.cnblogs.com/leaf-blog/p/11872249.html
Copyright © 2020-2023  润新知