欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例

程序员文章站 2023-11-17 22:03:22
本文实例讲述了php实现获取ip地址的5种方法,以及插入用户登录日志操作。分享给大家供大家参考,具体如下: php 获取ip地址的5种方法,插入用户登录日志实例,推荐使用...

本文实例讲述了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

更多关于php相关内容感兴趣的读者可查看本站专题:《php网络编程技巧总结》、《php curl用法总结》、《php数组(array)操作技巧大全》、《php字符串(string)用法总结》、《php数据结构与算法教程》、《php程序设计算法总结》、《php数学运算技巧总结》及《php常见数据库操作技巧汇总

希望本文所述对大家php程序设计有所帮助。