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基础学习笔记
Mar 18 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
PHP微框架Dispatch简介
Jun 12 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
PHP通过串口实现发送短信
Jul 08 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
laravel 出现command not found问题的解决方案
Oct 23 PHP
php生成短网址/短链接原理和用法实例分析
May 29 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+SqlServer实现分页显示
2006/10/09 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
JavaScript 乱码问题
2009/08/06 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
js实现拖拽效果
2015/02/12 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
详解python 发送邮件实例代码
2016/12/22 Python
Python中几种导入模块的方式总结
2017/04/27 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
Numpy中的mask的使用
2018/07/21 Python
python requests使用socks5的例子
2019/07/25 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
Python autoescape标签用法解析
2020/01/17 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
师范应届生教师求职信
2013/11/05 职场文书
自我鉴定标准格式
2014/03/19 职场文书
助理政工师申报材料
2014/06/03 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
机关作风建设心得体会
2014/10/22 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书