REMOTE_ADDR只能获取访问者本地连接中设置的IP,如中南民族大学校园网中自己设置的10.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址,
如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实IP。如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。

?
// 定义一个函数getIP()
function getIP()
{
global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else $ip = "Unknow";
return $ip;
}
// 使用方法:
echo getIP();

getenv("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地址。

转载于:https://www.cnblogs.com/webu/archive/2013/01/31/2886895.html

PHP获取客户端的真实IP相关推荐

  1. JavaWeb 获取客户端的真实IP地址

    通常我们在JavaWeb中获取客户端IP地址只需要使用request.getRemoteAddr();方法即可 如果前端使用了Nginx等反向代理的话,我们使用request.getRemoteAdd ...

  2. 通过Request获取客户端的真实IP

    我们在做项目的时候经常需要获取客户端的真实ip去进行判断,为此搜索了相关文章,以下这个讲解的比较明白,直接拿来 https://blog.csdn.net/yin_jw/article/details ...

  3. 如何获取客户端的真实IP

    原文地址:http://blog.csdn.net/zhangyaoming2004/article/details/6792695 问题引出: <hr/> 在JSP里,获取客户端的IP地 ...

  4. Java如何获取客户端主机真实IP地址

    项目开发中,小编遇到一种需求,就是将系统项目与某台主机的IP地址绑定,让该系统只能在某台主机上使用,不要问小编为什么,我也是第一次遇到这么奇怪的需求,当然也不要问小编为什么不使用权限控制,现在的权限控 ...

  5. 获取客户端ip_获取客户端访问真实IP

    通常,当 Kubernetes 集群内的客户端连接到服务的时候,是支持服务的 Pod 可以获取到客户端的 IP 地址的,但是,当通过节点端口接收到连接时,由于对数据包执行了源网络地址转换(SNAT), ...

  6. PHP 获取客户端的真实IP

    最近开发工程中,需要给第三方提供接口,由于是仅仅对单独一人提供接口支持,就暂时采取了IP白名单过滤的方式处理.下面是获取用户IP地址的方法,希望能够帮助到大家. /*** 获取当前的IP* @retu ...

  7. java 获取请求客户端的真实IP地址

    转载自:http://leiyongping88.iteye.com/blog/1545930 用request.getRemoteAddr(); 方法获取的IP地址是:127.0.0.1或192.1 ...

  8. Java获取请求客户端的真实IP地址

    整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...

  9. 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

最新文章

  1. 三段式LLVM编译器
  2. 常见的集合容器应当避免的坑
  3. Cent6.5 64位yum安装mysql5.5
  4. {转} Eclipse 高亮显示选中的相同变量
  5. springmvc默认方法名为映射名_SpringIoC和SpringMVC的快速入门
  6. Flask+Mysql搭建网站之数据库问题
  7. Linux sed命令实例
  8. node2vec算法
  9. java中观察者模式的使用场景
  10. mysql及JAVA汉字转拼音
  11. 这就是我不建议去外包公司开发的原因?
  12. 基于SSM实现的儿童疫苗信息管理系统设计与实现毕业设计源码311930
  13. UOJ 180【UR #12】实验室外的攻防战
  14. 速看!2022年8月编程语言排行榜出炉!第一名太牛啦
  15. 简单高效记账本的具体操作方法
  16. KeyError: ((1, 1), ‘<i8‘)
  17. pip更新方法(失败了一般用换一种方法就解决了)
  18. oracle12c启动apply,Oracle 12c 新特性 -- DG 默认使用 Real-Time Apply
  19. 方程求解的实验 matlab,matlab 实验四 求微分方程的解
  20. 2018.07.30 bzoj4355: Play with sequence(线段树)

热门文章

  1. 机器如何区分和判定指令和数据
  2. 标准化条件变量 -- condition_variable
  3. Go 语言标准库中 atomic.Value
  4. 解决安装pytorch慢的方法(pip安装)
  5. D(X)=E(X^2)-E^2(X)
  6. [BUUCTF-pwn]——cmcc_simplerop (ropchain)
  7. android 向左滑动动画,Android中的滑动动画
  8. 关于actionprovider
  9. k8s包管理器helm_kubernetes包管理神器-Helm
  10. excel中$、、^、/、*等各种符号的使用