通过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 相关文章推荐
杏林同学录(一)
Oct 09 PHP
PHP Stream_*系列函数
Aug 01 PHP
关于PHP session 存储方式的详细介绍
Jun 25 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
javascript some()函数用法详解
Nov 13 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
eclipse php wamp配置教程
Jun 30 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 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版(3)
2006/10/09 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python语言描述随机梯度下降法
2018/01/04 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
python实现翻译word表格小程序
2020/02/27 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
函授大学生自我鉴定
2014/02/05 职场文书
安全横幅标语
2014/06/09 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS