PHP精讲2021—如何获取真实客户端IP方法中学习扩展思维
生活中没有弱者,仅有不愿努力的人。
一、前言
如果说学习的思路是从理论的简单逐渐复杂,最后归纳出一套体系。
那么实践的思路就是先通过网络查到能解决问题的方法或者代码。
然后呢?
有的人选择就此收手,既然已经解决了遇到的问题,那就达到目的了,就这样吧,我再去解决下一个问题。
有的人则是开动自己聪明的小脑瓜,从一个点出发,思考这个点能发散出哪些问题,而这些问题自己是不是学会了,要是没有学会,那要不要借此机会学习了解下,最后达到成长的目的。
诚然,后者更加可贵,但是,后者的比例又能有多少呢?
二、由结论出发,先给代码?
问题:
PHP如何获取真实的客户端IP?
答案:
public function getip()
{
$IPaddress = '';
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$IPaddress = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$IPaddress = $_SERVER["HTTP_CLIENT_IP"];
} else if (isset($_SERVER["REMOTE_ADDR"])){
$IPaddress = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")) {
$IPaddress = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$IPaddress = getenv("HTTP_CLIENT_IP");
} else if (getenv("REMOTE_ADDR")){
$IPaddress = getenv("REMOTE_ADDR");
}
}
return $IPaddress;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
三、来自内心的拷问
上面的代码解决了问题,然后呢?
回看下前言,浅尝辄止并不是本文存在的意义,知其然不知其所以然也不是本人推崇的思维方式。
下面我以一问一答的方式,把格局打开,思路从一个问题变成许多问题。
四、以点带面
1. $_SERVER
怎么可能没有呢?
因为当前环境可能是命令行cli模式,命令行模式下是没有$_SERVER
的。
2. $_SERVER
里不就有客户端IPREMOTE_ADDR
为什么还要判断呢?
负载均衡会导致REMOTE_ADDR
不准确,如果存在负载均衡,就会通过HTTP_X_FORWARDED_FOR
传递真实的客户端IP
X-Forwarded-For: client, proxy1, proxy2
- 1
3. HTTP_CLIENT_IP
是哪里来的为什么本地测试没有?
HTTP_CLIENT_IP
并不是标准的header头,所以有的服务器没有配置就不会有比如本地环境。
4. REMOTE_ADDR
为什么不准呢?
- 负载均衡
- 可以伪造
五、总结
平静的工作环境并不能激发我们原始的学习动力,但是由于工作时间的增长,我们被动学习的机会越来越少。
但是IT行业的学习压力又是存在的,所以我们需要一个刺激让自己进一步去学习。
所以我推荐在工作实践中通过点散发出更多点,最后学到更多,为以后的升职加薪时刻做准备。
共勉。
文章来源: coderfix.blog.csdn.net,作者:小雨青年,版权归原作者所有,如需转载,请联系作者。
原文链接:coderfix.blog.csdn.net/article/details/119859957
- 点赞
- 收藏
- 关注作者
评论(0)