php 获取客户端的真实ip

 更新时间:2009年11月30日 19:21:48   作者:  
获取客户端的真实ip的一些思路分析,不一定很对,但起码正确率要好很多。
复制代码 代码如下:

function GetIP(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}

regist=off的问题
if ($register_globals!=1) {
@extract($_SERVER, EXTR_SKIP);
@extract($_COOKIE, EXTR_SKIP);
@extract($_SESSION, EXTR_SKIP);
@extract($_POST, EXTR_SKIP);
@extract($_FILES, EXTR_SKIP);
@extract($_GET, EXTR_SKIP);
@extract($_ENV, EXTR_SKIP);
}
其中REMOTE_ADDR比较好理解,php手册上有说明它是预定的变量;而HTTP_x_FORWARDED_FOR呢,在网上找了一些资料,是这么说的
在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。
不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。

至于HTTP_CLIENT_IP,有篇贴子上说
'HTTP_CLIENT_IP'是用户的IP,'HTTP_X_FORWARDED_FOR'是代理的IP
这些IP头消息未必能够取得到(因为不同的浏览器不同的网络设备,可能发不同的IP头消息).所以PHP就尝试把每个IP头消息判断一下,若有,则取其中的一个.

相关文章

  • php查看一个变量的占用内存的实例代码

    php查看一个变量的占用内存的实例代码

    在本篇文章里小编给各位分享的是关于php查看一个变量的占用内存的实例代码,需要的朋友们可以学习下。
    2020-03-03
  • PHP常用函数和常见疑难问题解答

    PHP常用函数和常见疑难问题解答

    虽然PHP在整体功能上不如Java强大,但相比PHP而言Java算是较重量级的,所以在小中型系统的开发上,使用PHP的趋势不可挡,就算是大型网站,比如淘宝也部分使用了PHP(Java后台逻辑+PHP前台展示),所以赶紧开始学PHP啦
    2014-03-03
  • Laravel 5.4重新登录实现跳转到登录前页面的原理和方法

    Laravel 5.4重新登录实现跳转到登录前页面的原理和方法

    在日常开发中,我们经常遇到一个需求,就是用户登陆后存在过期时间,超时用户需重新登录,下面这篇文章主要给大家介绍了关于Laravel 5.4重新登录实现跳转到登录前页面的原理和方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • 请php正则走开

    请php正则走开

    玩PHP玩了几年了,在刚刚接触PHP的时候感觉正则真的很洋气,我想替换啥就替换啥。然而随着工作的推移,渐渐对正则开发反感起来,正则的速度太慢了,而且特占内存。在一个群里有个网友说,正则速度快,正则简单,正则开发效率高。我并没有与他争辩,因为我刚刚做PHP的时候也是这样的想法。但是正则真的那么好吗?
    2008-03-03
  • php实现的数组转xml案例分析

    php实现的数组转xml案例分析

    这篇文章主要介绍了php实现的数组转xml,结合具体案例形式分析了PHP数组与xml转换的实现方法与相关操作注意事项,需要的朋友可以参考下
    2019-09-09
  • php删除文本文件中重复行的方法

    php删除文本文件中重复行的方法

    这篇文章主要介绍了php删除文本文件中重复行的方法,涉及php操作文本文件的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • php的扩展写法总结

    php的扩展写法总结

    在本篇文章里小编给大家分享了关于怎么写php的扩展的相关知识点内容,有需要的朋友们跟着学习下。
    2019-05-05
  • Linux下ZendOptimizer的安装与配置方法

    Linux下ZendOptimizer的安装与配置方法

    Linux下ZendOptimizer的安装与配置方法...
    2007-04-04
  • PHP栈的定义、入栈出栈方法及基于堆栈实现的计算器完整实例

    PHP栈的定义、入栈出栈方法及基于堆栈实现的计算器完整实例

    这篇文章主要介绍了PHP栈的定义、入栈出栈方法及基于堆栈实现的计算器,结合实例形式较为详细的分析了php定义与使用栈的基本方法,并结合完整实例形式给出了php基于堆栈实现高级计算器功能的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • PHP正则删除html代码中a标签并保留标签内容的方法

    PHP正则删除html代码中a标签并保留标签内容的方法

    这篇文章主要介绍了PHP正则删除html代码中a标签并保留标签内容的方法,涉及php基于正则的字符串匹配与子表达式操作相关技巧,需要的朋友可以参考下
    2017-05-05

最新评论