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+MySQL的聊天室设计
Oct 09 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
分享PHP header函数使用教程
Sep 05 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
PHP 搜索查询功能实现
Nov 29 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP attributes()函数讲解
Feb 03 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全局变量和类配合使用深刻理解
2013/06/05 PHP
php5.3 注意事项说明
2013/07/01 PHP
php读取3389的脚本
2014/05/06 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
Linux下Python获取IP地址的代码
2014/11/30 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
Structs界面控制层技术
2013/10/11 面试题
结构工程个人自荐信范文
2013/11/30 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
个人贷款承诺书
2014/03/28 职场文书
开学典礼观后感
2015/06/15 职场文书
行为习惯主题班会
2015/08/14 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
python百行代码实现汉服圈图片爬取
2021/11/23 Python