扫盲 2026.09.30 13:26 45 次浏览 0 条评论

PHP获取客户端IP方法

PHP里拿客户端IP,最直接的就是 $_SERVER['REMOTE_ADDR'],这个是连接你服务器的真实IP,最靠谱。但要是前面挂了CDN或者Nginx反向代理,拿到的往往是代理机器的IP,不是访客的。

这时候一般看 $_SERVER['HTTP_X_FORWARDED_FOR'],它记录了一串IP,逗号分隔,第一个是访客,后面是各级代理。不过这个头是请求带的,可以伪造,做记录统计够用,别拿它当验证依据。

用小皮面板在本机调试,看到的永远是 127.0.0.1,别以为代码写错了。

function getIp() {
    // 代理转发头优先,逗号分隔取第一个
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip = trim($list[0]);
    } else {
        // 没走代理,直接取连接地址
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

echo getIp();

还有几个头偶尔会用到:HTTP_CLIENT_IP、HTTP_X_REAL_IP,Nginx 里配了 proxy_set_header X-Real-IP $remote_addr; 就有。写个小函数按顺序挨个判断就行,取到就返回,简单省事。

说点什么 0

行思随记

欢迎来到:行思随记