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个人网站架设连环讲(一)
Oct 09 PHP
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
Apache服务器无法使用的解决方法
May 08 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
Linux安装配置php环境的方法
Jan 14 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
php中pcntl_fork详解
Apr 01 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
JavaScript库 开发规则
2009/01/31 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
json数据的列循环示例
2013/09/06 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
详解Swift中属性的声明与作用
2016/06/30 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Python networkx包的实现
2020/02/14 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
《雨霖铃》教学反思
2014/02/22 职场文书
医院院务公开实施方案
2014/05/03 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python