您的位置:首页 >PHP获取客户端IP地址的正确方法
发布于2026-03-05 阅读(0)
扫一扫,手机访问
PHP获取客户端真实IP需按优先级检查HTTP_X_REAL_IP、HTTP_X_FORWARDED_FOR、REMOTE_ADDR,并过滤私有地址;直连用REMOTE_ADDR,代理环境需校验X-Forwarded-For首IP或Nginx透传的X-Real-IP,兼容场景可辅以getenv()。

如果您在PHP开发中需要识别访问网站的用户来源,获取客户端真实IP地址是常见需求。以下是多种获取客户端IP地址的方法:
该变量返回与Web服务器建立TCP连接的客户端IP地址,适用于未经过代理或负载均衡的直连场景。
1、在PHP脚本中直接调用$_SERVER['REMOTE_ADDR']变量。
2、该值不受HTTP头控制,安全性较高,但可能被反向代理覆盖为代理服务器IP。
3、若服务器部署在Nginx+PHP-FPM架构下,需确认fastcgi_param REMOTE_ADDR $remote_addr;已正确传递。
当请求经过正向代理或CDN时,真实客户端IP通常被写入X-Forwarded-For请求头,多个IP以逗号分隔,最左侧为原始IP。
1、使用$_SERVER['HTTP_X_FORWARDED_FOR']读取该头部值。
2、对获取到的字符串执行trim()和explode(',', ...)操作,提取第一个非空IP段。
3、必须验证IP格式合法性,防止伪造头注入无效或私有地址。
Nginx反向代理常通过proxy_set_header X-Real-IP $remote_addr;将真实IP写入此头,其值通常为单一可信IP。
1、检测$_SERVER['HTTP_X_REAL_IP']是否存在且不为空。
2、对该值执行filter_var(..., FILTER_VALIDATE_IP)校验。
3、仅在明确配置了Nginx透传且信任该代理链时才可直接采用。
为提高准确性,需按优先级顺序检查多个来源,并排除局域网、保留地址等不可信IP段。
1、定义可信代理IP列表(如CDN节点、公司内网出口IP)。
2、依次检查HTTP_X_REAL_IP、HTTP_X_FORWARDED_FOR、REMOTE_ADDR。
3、对每个候选IP调用filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)过滤。
某些CGI或FastCGI配置下,$_SERVER可能未完全填充,getenv()可作为补充方式读取环境变量。
1、尝试调用getenv('HTTP_X_FORWARDED_FOR')获取转发IP。
2、尝试调用getenv('REMOTE_ADDR')获取连接地址。
3、需注意getenv()在禁用该函数的环境中会返回false,应配合isset()或empty()判断。
上一篇:Webapp 令牌管理完整教程
下一篇:《燕云十六声》秦川地图玩法详解
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9