PHP获取客户端真实IP

今天学习了一下PHP获取客户端真实IP,又遇到坑(不完全算坑,就是不懂吧)...

代码如下:

//获取客户端真实IP
function getIp() {
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
        $ip = getenv("HTTP_CLIENT_IP");
    else
        if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        else
            if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
                $ip = getenv("REMOTE_ADDR");
            else
                if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
                    $ip = $_SERVER['REMOTE_ADDR'];
                else
                    $ip = "unknown";
    return ($ip);
}

代码其实没问题,本地测试一下,结果要么获取了127.0.0.1,要么是:::。

找了一堆博客大都这样写,那问题是?

最后放到阿里云服务器再本地客户端测试一下,结果成功了。。。

原因可能是因为$_SERVER["HTTP_CLIENT_IP"]这个可以获取客户端的IP,她存在于http请求的header中(但是它可以伪造),本地没有数据,所以会出错(来自http://blog.163.com/the_big_girl/blog/static/17371530020158118204740/)


原文地址:https://www.cnblogs.com/qq1995/p/10359010.html