通过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之对抗Web扫描器的脚本技巧
Oct 01 PHP
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
PHP中其实也可以用方法链
Nov 10 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 PHP
PHP 验证登陆类分享
Mar 13 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP实现的多维数组去重操作示例
Jul 21 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 PHP
如何在centos8自定义目录安装php7.3
Nov 28 PHP
thinkphp5实现微信扫码支付
Dec 23 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 __autoload()方法真的影响性能吗?
2012/03/30 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
jQuery 处理表单元素的代码
2010/02/15 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
深入浅析Python字符编码
2015/11/12 Python
Python编程实现正则删除命令功能
2017/08/30 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
python3.5绘制随机漫步图
2018/08/27 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
校园文化建设方案
2014/02/03 职场文书
财产公证书格式
2014/04/10 职场文书
女性励志书籍推荐
2019/08/19 职场文书
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android