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


Posted in PHP onFebruary 28, 2019

本文实例讲述了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代码
Jul 14 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
php画图实例
Nov 05 PHP
迁移PHP版本到PHP7
Feb 06 PHP
php字符串函数学习之strstr()
Mar 27 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
PHP微信发送推送消息乱码的解决方法
Feb 28 #PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 #PHP
PHP删除数组中特定元素的两种方法
Feb 28 #PHP
PHP实时统计中文字数和区别
Feb 28 #PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 #PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 #PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 #PHP
You might like
php抓取并保存网站图片的实现代码
2015/10/28 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
php-msf源码详解
2017/12/25 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
document.createElement()用法
2013/03/13 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
python批量生成本地ip地址的方法
2015/03/23 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
super()与this()的区别
2016/01/17 面试题
实习生自荐信范文
2013/11/13 职场文书
运动会广播稿400字
2014/01/25 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
感谢信格式范文
2015/01/22 职场文书
手术室护士个人总结
2015/02/13 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书