通过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 相关文章推荐
PHP5新特性: 更加面向对象化的PHP
Nov 18 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
使用array_map简单搞定PHP删除文件、删除目录
Oct 29 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
Yii多表联合查询操作详解
Jun 02 PHP
laravel学习教程之存取器
Jul 30 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
Mar 15 PHP
Laravel实现autoload方法详解
May 07 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
PDO::commit讲解
Jan 27 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设计模式 Command(命令模式)
2011/06/26 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
JS身份证信息验证正则表达式
2017/06/12 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python运行DLL文件的方法
2020/01/17 Python
python 爬取小说并下载的示例
2020/12/07 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
班级心理活动总结
2014/07/04 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
教师先进个人材料
2014/12/17 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技