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 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
比较简单的百度网盘文件直链PHP代码
Mar 24 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
Jun 17 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
php 多继承的几种常见实现方法示例
Nov 18 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 Global定义全局变量使用说明
2013/08/15 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
JavaScript基本对象
2007/01/11 Javascript
Stop SQL Server
2007/06/21 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
js导出txt示例代码
2014/01/14 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
简单的python后台管理程序
2017/04/13 Python
利用Python破解斗地主残局详解
2017/06/30 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Python中psutil的介绍与用法
2019/05/02 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
公司会计主管岗位责任制
2014/03/01 职场文书
刊首寄语大全
2014/04/11 职场文书
中等生评语大全
2014/05/04 职场文书
医院党员公开承诺书
2014/08/30 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
工会文体活动总结
2015/05/07 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
教导处教学工作总结
2015/08/12 职场文书
Oracle笔记
2021/04/05 Oracle
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server