通过PHP实现获取访问用户IP

 更新时间:2020年05月09日 09:32:34   作者:demopy  
这篇文章主要介绍了通过PHP实现获取访问用户IP,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在php中自带了一个非常的简单的获取IP地址的全局变量,很多初学都获取IP都使用它了,但是对于这些我们一般用法是满足了,但是对于要求高精度这个函数还是不行的。

这个是最简单的方法,对于开了透明代理之类的是没有办法的,如果内网访问也不能读取正确的外网IP,不过很省力就是了:

$ip = $_SERVER["REMOTE_ADDR"];

搞定~

上面方法用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址

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

else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。

这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");

这两行语句获得客户端的IP地址也是真实的IP地址,根据经验得出

function getIP()
{
  static $realip;
  if (isset($_SERVER)){
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
      $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
      $realip = $_SERVER["HTTP_CLIENT_IP"];
    } else {
      $realip = $_SERVER["REMOTE_ADDR"];
    }
  } else {
    if (getenv("HTTP_X_FORWARDED_FOR")){
      $realip = getenv("HTTP_X_FORWARDED_FOR");
    } else if (getenv("HTTP_CLIENT_IP")) {
      $realip = getenv("HTTP_CLIENT_IP");
    } else {
      $realip = getenv("REMOTE_ADDR");
    } 
  }
  return $realip;
}

另外如果我们想获取更精准的使用第三方是一个不错的方法哦

function get_onlineip() {
  $ch = curl_init('http://www.ip138.com/ip2city.asp');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $a = curl_exec($ch);
  preg_match('/[(.*)]/', $a, $ip);
  return $ip[1];
 }

这样不管理代理还是什么都可以判断IP地址哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 探讨GDFONTPATH能否被winxp下的php支持

    探讨GDFONTPATH能否被winxp下的php支持

    本篇文章是对关于GDFONTPATH能否被winxp下的php支持进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP符合PSR编程规范的实例分享

    PHP符合PSR编程规范的实例分享

    好的代码书写习惯可以让人赏心悦目,下面这篇文章就给大家分享了PHP符合PSR编程规范的实例代码,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • php+Mysqli利用事务处理转账问题实例

    php+Mysqli利用事务处理转账问题实例

    这篇文章主要介绍了php+Mysqli利用事务处理转账问题的方法,实例分析了php+mysqli处理事务的提交与回滚的技巧,需要的朋友可以参考下
    2015-02-02
  • PHP直接修改表内容DataGrid功能实现代码

    PHP直接修改表内容DataGrid功能实现代码

    最近想做一个通过PHP实现DataGrid功能的东西,这样可以直接修改数据库中表的内容,而不用开发【新增数据页面】和【编辑页面】,本篇首先介绍基于MySQL的使用方法,再简单介绍对于Oracle连接(基于sqlrelay)的二次开发。
    2015-09-09
  • php中如何防止表单的重复提交

    php中如何防止表单的重复提交

    在php中如何防止表单的重复提交?其实也有几种解决方法。下面小编就为大家介绍一下吧。需要的朋友可以过来参考下
    2013-08-08
  • php模拟登陆的实现方法分析

    php模拟登陆的实现方法分析

    这篇文章主要介绍了php模拟登陆的实现方法,实例分析了snoopy与curl两种实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • php给图片添加文字水印方法汇总

    php给图片添加文字水印方法汇总

    在php中要给图片加水印我们需要给php安装GD库了,这里我们不介绍GD库安装,只介绍怎么利用php给图片添加文字水印的4种方法的汇总。有需要的小伙伴可以参考下。
    2015-08-08
  • php 正确解码javascript中通过escape编码后的字符

    php 正确解码javascript中通过escape编码后的字符

    js的escape如何在PHP中来解呢?下面的这个函数可以正确的解析,网上有不少unescape的函数,但好用的不多.
    2010-01-01
  • 常用的php对象类型判断

    常用的php对象类型判断

    整理的一些常用的php数值判断函数,保存为php文件
    2008-08-08
  • php实现随机显示图片方法汇总

    php实现随机显示图片方法汇总

    本文分享一个php实现的随机显示图片的函数,可以将指定文件夹中存放的图片随机地显示出来。有兴趣的朋友研究下吧。
    2015-05-05

最新评论