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+MySQL的聊天室设计
Oct 09 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
php定界符
Jun 19 PHP
php实现多城市切换特效
Aug 09 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
PHP-FPM实现性能优化
Mar 31 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
关于php循环跳出的问题
2013/07/01 PHP
php将html转为图片的实现方法
2017/05/19 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
Node.js编码规范
2014/07/14 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
python 识别图片中的文字信息方法
2018/05/10 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
关于python3中setup.py小概念解析
2019/08/22 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
Python操作Excel的学习笔记
2021/02/18 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
JAVA中运算符的分类及举例
2015/09/12 面试题
军训鉴定表自我鉴定
2014/02/13 职场文书
创先争优承诺书范文
2014/03/31 职场文书
小学社会实践活动总结
2014/07/03 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
小学端午节活动总结
2015/02/11 职场文书
八年级语文教学反思
2016/03/03 职场文书
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS