• php 获取ip地址的5种方法,插入用户登录日志实例


    php 获取ip地址的5种方法,插入用户登录日志实例,推荐使用第二种方法

    <?php   //方法1:
    $ip = $_SERVER["REMOTE_ADDR"];
    echo $ip;
    
    //方法2:
    $ip = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
    $ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
    echo $ip;
    
    //方法3:
    function getRealIp()
    {
        $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 getRealIp();
    
    //方法4:
    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 ;
    
    //方法5:
    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;  

    实例:在用户登录时获取用户IP,插入到数据库登录日志表里

    //增加用户登录日志
                    $ip = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
                    $ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
                    $this->usermodel->addUserlog($userid,$nickname,$ip);
    function addUserlog($userid,$nickname,$ip) {
            try {
                $now = date("Y-m-d H-i-s",time());
                $data=array(
                    'userid'=>$userid,
                    'nickname'=>$nickname,
                    'ip'=>$ip,
                    'logintime'=>$now
                );
                $insert_query = $this->db->insert_string('user_log', $data);
                $this->db->query($insert_query);
                return 0;
            } catch ( Exception $e ) {
                return -1;
            }
        }

    日志表结构:

    CREATE TABLE `user_log` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `userid` bigint(20) NOT NULL,
      `nickname` varchar(50) NOT NULL,
      `ip` varchar(50) NOT NULL,
      `logintime` datetime NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
  • 相关阅读:
    RAID卡是否有(启用)缓存对“随机读写”性能有巨大的影响。
    《C++程序设计实践与技巧:测试驱动开发》 环境搭建遇到的坑
    c++ 实现 cout 示例
    c++ 文件
    js 鼠标事件模拟
    eclipse c++ 配置 c++ 17
    c++ 17 vector中string的性能问题 std::vector<std::string> string vs string_view
    c++ 17 模板
    C++17剖析:string在Modern C++中的实现
    编译程序加不加 -lpthread 的区别
  • 原文地址:https://www.cnblogs.com/zdz8207/p/php-ip-user-login.html
Copyright © 2020-2023  润新知