php没法猎取实在ip【php教程】,php,获取,真实,ip
一、猎取用户实在IP地点
public static function getClientIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } if (getenv('HTTP_X_REAL_IP')) { $ip = getenv('HTTP_X_REAL_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); $ips = explode(',', $ip); $ip = $ips[0]; } elseif (getenv('REMOTE_ADDR')) { $ip = getenv('REMOTE_ADDR'); } else { $ip = '0.0.0.0'; } return $ip; }
注重:
$_SERVER和getenv的区分,getenv不支持IIS的isapi体式格局运转的php。getenv(“REMOTE_ADDR”)函数在 apache下能一般猎取ip地点,而在iis中没有作用,而$_SERVER['REMOTE_ADDR']函数,既可在apache中胜利猎取访客的ip地点,在iis下也一样有用。
二、关于REMOTE_ADDR
这个变量猎取到的是《直接泉源》的 IP 地点,所谓《直接泉源》指的是直接要求该地点的客户端 IP 。这个 IP 在单服务器的状况下,很正确的是客户端 IP ,没法捏造。固然并非一切的顺序都一定是单服务器,比方在采纳负载平衡的状况(比方采纳 haproxy 或许 nginx 举行负载平衡),这个IP就是转发机械的IP,由于历程是客户端->负载平衡->服务端。是由负载平衡直接接见的服务端而不是客户端。
三、关于 HTTP_X_FORWARDED_FOR 和 HTTP_CLIENT_IP
在负载平衡的状况下直接运用 REMOTE_ADDR 是没法猎取客户端 IP 的,这就是一个题目,必需处理。于是就衍生出了负载平衡端将客户端 IP 加入到 HEAD 中发送给服务端,让服务端能够猎取到客户端的实在 IP 。固然也就产生了列位所说的捏造,毕竟 HEAD 除了协定里牢固的那几个数据,其他数据都是可自定义的。
引荐教程:PHP视频教程
以上就是php没法猎取实在ip的细致内容,更多请关注ki4网别的相干文章!