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 相关文章推荐
实用函数2
Nov 08 PHP
程序员编程十条戒律
Jul 09 PHP
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 PHP
在mysql数据库原有字段后增加新内容
Nov 26 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP下载文件函数与用法示例
Sep 27 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单文件版在线代码编辑器
2015/03/12 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
js验证上传图片的方法
2015/05/12 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
Python ftp上传文件
2016/02/13 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python新手学习函数默认参数设置
2020/06/03 Python
python打包多类型文件的操作方法
2020/09/21 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js