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 相关文章推荐
别人整理的服务器变量:$_SERVER
Oct 20 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
php实现jQuery扩展函数
Oct 30 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
Jun 30 PHP
nginx下安装php7+php5
Jul 31 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
php中序列化与反序列化详解
Feb 13 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
PHP变量的作用范围实例讲解
Dec 22 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打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
华为慧通笔试题
2016/04/22 面试题
网络文明传播志愿者活动方案
2014/08/20 职场文书
学校食堂标语
2014/10/06 职场文书
可怜妈妈观后感
2015/06/09 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python