类别:PHP教程 / 日期:2019-12-01 / 浏览:211 / 评论:0

一、猎取用户实在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网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章