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 相关文章推荐
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
php中session使用示例
Mar 29 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
PHP中文编码小技巧
Dec 25 PHP
PHP加密解密字符串汇总
Apr 26 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 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针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
功能强大的php分页函数
2016/07/20 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
python中函数默认值使用注意点详解
2016/06/01 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
Django中的文件的上传的几种方式
2018/07/23 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
网上卖盒饭创业计划书
2014/01/26 职场文书
家长给学校的建议书
2014/05/15 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
匿名检举信范文
2015/03/02 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书