PHP精讲2021—如何获取真实客户端IP方法中学习扩展思维

Posted 小雨同学的服务器果然有问题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. $_SERVER怎么可能没有呢?

因为当前环境可能是命令行cli模式,命令行模式下是没有$_SERVER的。

2. $_SERVER里不就有客户端IPREMOTE_ADDR为什么还要判断呢?

负载均衡会导致REMOTE_ADDR不准确,如果存在负载均衡,就会通过HTTP_X_FORWARDED_FOR传递真实的客户端IP

X-Forwarded-For: client, proxy1, proxy2

3. HTTP_CLIENT_IP是哪里来的为什么本地测试没有?

HTTP_CLIENT_IP并不是标准的header头,所以有的服务器没有配置就不会有比如本地环境。

4. REMOTE_ADDR为什么不准呢?

  1. 负载均衡
  2. 可以伪造

五、总结

平静的工作环境并不能激发我们原始的学习动力,但是由于工作时间的增长,我们被动学习的机会越来越少。

但是IT行业的学习压力又是存在的,所以我们需要一个刺激让自己进一步去学习。

所以我推荐在工作实践中通过点散发出更多点,最后学到更多,为以后的升职加薪时刻做准备。

共勉。

以上是关于PHP精讲2021—如何获取真实客户端IP方法中学习扩展思维的主要内容,如果未能解决你的问题,请参考以下文章

如何获取伪装ip下的真实ip地址

php获取客户端真实IP 防止代理和作弊

PHP获取用户真实IP地址

如何在 php 中获取真实的客户端 IP 或地理位置?

PHP获取客户端真实IP的自定义函数

PHP获取客户端真实IP的自定义函数