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 将excel导入mysql
Nov 09 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
PHP的全局错误处理详解
Apr 25 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
php字符串操作常见问题小结
Oct 11 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
PHP实现根据密码长度显示安全条
Jul 04 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
模仿OSO的论坛(四)
2006/10/09 PHP
关于PHP5 Session生命周期介绍
2010/03/02 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
javascript Math.random()随机数函数
2009/11/04 Javascript
jQuery each()小议
2010/03/18 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
python实现随机森林random forest的原理及方法
2017/12/21 Python
python实现自动登录
2018/09/17 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
static关键字的用法
2013/10/07 面试题
北京青年观后感
2015/06/15 职场文书
运动会新闻稿
2015/07/17 职场文书
新人入职感言
2015/07/31 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Python字典的基础操作
2021/11/01 Python