商城首页欢迎来到中国正版软件门户

您的位置:首页 >PHP获取客户端IP地址的正确方法

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地址的方法【技巧】

如果您在PHP开发中需要识别访问网站的用户来源,获取客户端真实IP地址是常见需求。以下是多种获取客户端IP地址的方法:

一、使用$_SERVER['REMOTE_ADDR']获取直接连接IP

该变量返回与Web服务器建立TCP连接的客户端IP地址,适用于未经过代理或负载均衡的直连场景。

1、在PHP脚本中直接调用$_SERVER['REMOTE_ADDR']变量。

2、该值不受HTTP头控制,安全性较高,但可能被反向代理覆盖为代理服务器IP。

3、若服务器部署在Nginx+PHP-FPM架构下,需确认fastcgi_param REMOTE_ADDR $remote_addr;已正确传递。

二、读取HTTP_X_FORWARDED_FOR头获取原始IP

当请求经过正向代理或CDN时,真实客户端IP通常被写入X-Forwarded-For请求头,多个IP以逗号分隔,最左侧为原始IP。

1、使用$_SERVER['HTTP_X_FORWARDED_FOR']读取该头部值。

2、对获取到的字符串执行trim()explode(',', ...)操作,提取第一个非空IP段。

3、必须验证IP格式合法性,防止伪造头注入无效或私有地址

三、检查HTTP_X_REAL_IP头(Nginx常用)

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_IPHTTP_X_FORWARDED_FORREMOTE_ADDR

3、对每个候选IP调用filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)过滤。

五、使用getenv()函数兼容不同SAPI环境

某些CGI或FastCGI配置下,$_SERVER可能未完全填充,getenv()可作为补充方式读取环境变量。

1、尝试调用getenv('HTTP_X_FORWARDED_FOR')获取转发IP。

2、尝试调用getenv('REMOTE_ADDR')获取连接地址。

3、需注意getenv()在禁用该函数的环境中会返回false,应配合isset()或empty()判断

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注