PHP怎么获取访问者真实IP

  介绍

本篇内容主要讲解“PHP怎么获取访问者真实IP”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP怎么获取访问者真实IP”吧!

在没有开代理服务器的情况下,直接使用:

$ ip=$ _SERVER [“REMOTE_ADDR"];

如果客户端是使用代理服务器来访问,那取到的就是代理服务器的ip地址,而不是真正的客户端ip地址,,反之就是真实ip;

下面是通用的一种写法,都能获取到:

要想透过代理服务器取得客户端的真实ip地址,就要使用getenv (“HTTP_X_FORWARDED_FOR")来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv (“HTTP_X_FORWARDED_FOR")取到的值将是空的。

 function  getIP ()
  {
  static 才能;realip美元;
  if 才能;(收取($ _SERVER)) {
  ,,,if (收取($ _SERVER [“HTTP_X_FORWARDED_FOR"])) {
  ,,,,,realip 美元;=,$ _SERVER (“HTTP_X_FORWARDED_FOR");
  ,,,},else  if (收取($ _SERVER [“HTTP_CLIENT_IP"])), {
  ,,,,,realip 美元;=,$ _SERVER (“HTTP_CLIENT_IP");
  ,,,},{else 
  ,,,,,realip 美元;=,$ _SERVER (“REMOTE_ADDR");
  ,,,}
  ,,},{else 
  ,,,if 采用(“HTTP_X_FORWARDED_FOR")) {
  ,,,,,realip 美元;=,getenv (“HTTP_X_FORWARDED_FOR");
  ,,,},else  if 采用(“HTTP_CLIENT_IP")), {
  ,,,,,realip 美元;=,getenv (“HTTP_CLIENT_IP");
  ,,,},{else 
  ,,,,,realip 美元;=,getenv (“REMOTE_ADDR");
  ,,,},
  ,,}
  return 才能;realip美元;
  }

注意:

$ _SERVER和采用的区别,采用不支持IIS的isapi方式运行php
的getenv (REMOTE_ADDR)函数在apache下能正常获取ip地址,而在IIS中没有作用,而$ _SERVER [& # 39; REMOTE_ADDR& # 39;]函数,既可在apache中成功获取访客的ip地址,在IIS下也同样有效

另外根据ip地址,可以实现类似限制ip访问的防刷机制;

 & lt; ? php ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,//方法1:
  _SERVER ip 美元;=,(“REMOTE_ADDR");
  echo  $ ip;
  ,,//方法2:
  user_IP 美元;=,($ _SERVER [“HTTP_VIA"]), ?, $ _SERVER [“HTTP_X_FORWARDED_FOR"],:, $ _SERVER (“REMOTE_ADDR");
  $ user_IP =, (user_IP美元),?,user_IP 美元;:,$ _SERVER (“REMOTE_ADDR");
  echo  user_IP美元;
  ,,//方法3:
  function  getRealIp ()
  {
  美元才能ip=false;
  如果才能(!空($ _SERVER [“HTTP_CLIENT_IP"])) {
  ,,,ip 美元;=,$ _SERVER (“HTTP_CLIENT_IP");
  ,,}
  if 才能;(!空($ _SERVER [& # 39; HTTP_X_FORWARDED_FOR& # 39;])), {
  ,,,ips 美元;=,explode  (,,,,,, $ _SERVER [& # 39; HTTP_X_FORWARDED_FOR& # 39;]);
  ,,,if  (ip),{,函数(ips美元,,ip);, ip 美元;=,假,,}
  ,,,for ($小姐:=,0;,美元小姐:& lt;, count ($ ips);,我+ +美元),{
  ,,,,,if  (! eregi (“^ 172.16(10││192.168)干净,,ips美元[$ i])), {
  ,,,,,,,ip 美元;=,ips美元($ i);
  ,,,,,,,休息;
  ,,,,,}
  ,,,}
  ,,}
  return 才能;(ip 美元;?,ip 美元;:,$ _SERVER [& # 39; REMOTE_ADDR& # 39;]);
  }
  echo  getRealIp ();
  ,,//方法4:
  if  (HTTP_SERVER_VARS美元[“HTTP_X_FORWARDED_FOR"])
  {
  时间=美元才能ip  HTTP_SERVER_VARS美元(“HTTP_X_FORWARDED_FOR");
  }
  elseif  (HTTP_SERVER_VARS美元[“HTTP_CLIENT_IP"])
  {
  时间=美元才能ip  HTTP_SERVER_VARS美元(“HTTP_CLIENT_IP");
  }
  elseif  (HTTP_SERVER_VARS美元[“REMOTE_ADDR"])
  {
  时间=美元才能ip  HTTP_SERVER_VARS美元(“REMOTE_ADDR");
  }
  elseif  (getenv (“HTTP_X_FORWARDED_FOR"))
  {
  时间=美元才能ip  getenv (“HTTP_X_FORWARDED_FOR");
  }
  elseif  (getenv (“HTTP_CLIENT_IP"))
  {
  时间=美元才能ip  getenv (“HTTP_CLIENT_IP");
  }
  elseif  (getenv (“REMOTE_ADDR"))
  {
  时间=美元才能ip  getenv (“REMOTE_ADDR");
  }
  其他的
  {
  时间=美元才能ip “Unknown";
  }
  echo  ip 美元;;
  ,,//方法5:
  如果采用(& # 39;HTTP_CLIENT_IP& # 39;)), {
  时间=美元才能onlineip  getenv (& # 39; HTTP_CLIENT_IP& # 39;);
  采用},elseif & # 39; HTTP_X_FORWARDED_FOR& # 39;)), {
  时间=美元才能onlineip  getenv (& # 39; HTTP_X_FORWARDED_FOR& # 39;);
  采用},elseif & # 39; REMOTE_ADDR& # 39;)), {
  时间=美元才能onlineip  getenv (& # 39; REMOTE_ADDR& # 39;);
  },{else 
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

PHP怎么获取访问者真实IP