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的ob_start();控制您的浏览器cache!
Nov 25 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 PHP
浅析php中array_map和array_walk的使用对比
Nov 20 PHP
基于CI框架的微信网页授权库示例
Nov 25 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
YII框架页面缓存操作示例
Apr 29 PHP
Laravel 创建指定表 migrate的例子
Oct 09 PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 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中实现图片的锐化
2006/10/09 PHP
php中引用符号(&amp;)的使用详解
2013/11/13 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
vue axios用法教程详解
2017/07/23 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
Python内置函数 next的具体使用方法
2017/11/24 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
简单了解如何封装自己的Python包
2020/07/08 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
六查六看剖析材料
2014/02/15 职场文书
团支部推优材料
2014/05/21 职场文书
员工安全承诺书
2014/05/22 职场文书
社团活动总结报告
2014/06/27 职场文书
党性教育心得体会
2014/09/03 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
农业生产宣传标语
2014/10/08 职场文书
走群众路线剖析材料
2014/10/09 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
团代会邀请函
2015/02/02 职场文书
人力资源部岗位职责
2015/02/11 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android