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开发文件系统实例讲解
Oct 09 PHP
一个图形显示IP的PHP程序代码
Oct 19 PHP
PHP 开发环境配置(测试开发环境)
Apr 28 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
php使用websocket示例详解
Mar 12 PHP
PHP多进程编程实例
Oct 15 PHP
php获取错误信息的方法
Jul 17 PHP
php实现可逆加密的方法
Aug 11 PHP
十大使用PHP框架的理由
Sep 26 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 PHP
设定php简写功能的方法
Nov 28 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生成WAP页面
2006/10/09 PHP
PHP 组件化编程技巧
2009/06/06 PHP
PHP函数常用用法小结
2010/02/08 PHP
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
Node.js模块加载详解
2014/08/16 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
Python实现的简单算术游戏实例
2015/05/26 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
python自带的http模块详解
2016/11/06 Python
Python Flask基础教程示例代码
2018/02/07 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python爬取微信公众号文章
2018/08/31 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python实现抖音点赞功能
2019/04/07 Python
Python pandas如何向excel添加数据
2020/05/22 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
运动会入场词100字
2014/02/06 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
2015年大学生实习评语
2015/03/25 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
可可西里观后感
2015/06/08 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang