通过PHP实现获取访问用户IP


Posted in PHP onMay 09, 2020

在php中自带了一个非常的简单的获取IP地址的全局变量,很多初学都获取IP都使用它了,但是对于这些我们一般用法是满足了,但是对于要求高精度这个函数还是不行的。

这个是最简单的方法,对于开了透明代理之类的是没有办法的,如果内网访问也不能读取正确的外网IP,不过很省力就是了:

$ip = $_SERVER["REMOTE_ADDR"];

搞定~

上面方法用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址

要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。

else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。

这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");

这两行语句获得客户端的IP地址也是真实的IP地址,根据经验得出

function getIP()
{
  static $realip;
  if (isset($_SERVER)){
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
      $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
      $realip = $_SERVER["HTTP_CLIENT_IP"];
    } else {
      $realip = $_SERVER["REMOTE_ADDR"];
    }
  } else {
    if (getenv("HTTP_X_FORWARDED_FOR")){
      $realip = getenv("HTTP_X_FORWARDED_FOR");
    } else if (getenv("HTTP_CLIENT_IP")) {
      $realip = getenv("HTTP_CLIENT_IP");
    } else {
      $realip = getenv("REMOTE_ADDR");
    } 
  }
  return $realip;
}

另外如果我们想获取更精准的使用第三方是一个不错的方法哦

function get_onlineip() {
  $ch = curl_init('http://www.ip138.com/ip2city.asp');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $a = curl_exec($ch);
  preg_match('/[(.*)]/', $a, $ip);
  return $ip[1];
 }

这样不管理代理还是什么都可以判断IP地址哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Discuz 模板引擎的封装类代码
Jul 18 PHP
PHP高级OOP技术演示
Aug 27 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
PHP中overload与override的区别
Feb 13 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
Yii Framework框架开发微信公众平台示例
Apr 26 PHP
如何通过PHP实现Des加密算法代码实例
May 09 #PHP
php变量与字符串的增删改查操作示例
May 07 #PHP
PHP数组与字符串互相转换实例
May 05 #PHP
禁止直接访问php文件代码分享
May 05 #PHP
php将字符串转换为数组实例讲解
May 05 #PHP
php输出形式实例整理
May 05 #PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 #PHP
You might like
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
python读取与写入csv格式文件的示例代码
2017/12/16 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
python写入文件自动换行问题的方法
2019/07/05 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
介绍一下Mysql的存储引擎
2015/02/12 面试题
运动会广播稿150字
2014/02/19 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
大班幼儿评语大全
2014/04/30 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
中学生逃课检讨书
2015/02/17 职场文书
交通事故起诉书
2015/05/19 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python