通过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 相关文章推荐
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
Apache服务器无法使用的解决方法
May 08 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP检测链接是否存在的代码实例分享
May 06 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 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实现智能文件类型检测的实现代码
2011/08/02 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
json简单介绍
2008/06/10 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
vue中appear的用法
2017/08/17 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
python九九乘法表的实例
2017/09/26 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
初三班主任寄语大全
2014/04/04 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
如何写好活动总结
2019/06/21 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书