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