PHP获得用户IP地址的更好方法
remote_addr只能获得游客的本地连接设置IP,如10.x.xxx.xxx系列IP已经成立了一个大学校园网,这个功能是获得出口局域网网关的IP地址,如果访问者使用代理服务器,代理服务器将无法获得IP,但获得的IP访问网关。如果这个功能应用到网页上,限制IP访问,页面无法访问其他人甚至通过在有限的IP接入段的代理服务器。下面提供了一个函数:
复制代码代码如下所示:
< PHP
/ /定义一个函数getip()
getip()函数
{
全球知识产权;
如果(getenv(http_client_ip ))
为IP = getenv(http_client_ip );
如果(getenv(http_x_forwarded_for ))
为IP = getenv(http_x_forwarded_for );
如果(getenv(remote_addr ))
为IP = getenv(remote_addr );
其他的
为IP =未知;
返回ip;
}
使用方法:
Echo getIP ();
>
getenv(remote_addr )是用来获取客户端的IP地址,但如果客户端使用代理服务器来访问代理服务器的IP地址是不是真正的客户端IP地址,通过代理服务器获取客户端真实IP地址,getenv(http_x_forwarded_for )是用来读取。
但如果客户不通过代理服务器访问,这是用getenv价值(http_x_forwarded_for )将是空的。
复制代码代码如下所示:
如果(getenv(http_x_forwarded_for ))
为IP = getenv(http_x_forwarded_for );
表明如果getenv(http_x_forwarded_for )得到的值不为空,即客户端使用代理服务器,那么变量$ IP等于被getenv真实IP价值(http_x_forwarded_for )。
如果价值上如果(getenv(http_x_forwarded_for ))是空的(即不使用代理服务器),以下为IP = getenv(http_x_forwarded_for)将不会被执行。
在这种情况下,客户机已经确认客户机不使用代理服务器,因此通过
复制代码代码如下所示:
如果(getenv(remote_addr ))
为IP = getenv(remote_addr );
两行语句得到客户机的IP地址以及真正的IP地址。