php 获取客户端的真实ip


Posted in PHP onNovember 30, 2009
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不用正则采集速度探究总结
Mar 24 PHP
Php Cookie的一个使用注意点
Nov 08 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
nginx+thinkphp下解决不支持pathinfo模式
Jul 01 PHP
php面向对象值单例模式
May 03 PHP
PHP 匿名函数与注意事项详细介绍
Nov 26 PHP
PHP单例模式简单用法示例
Jun 23 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
php7 新增功能实例总结
May 25 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 #PHP
php中$this->含义分析
Nov 29 #PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 #PHP
Ajax+PHP 边学边练之四 表单
Nov 27 #PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 #PHP
完美解决PHP中文乱码
Nov 26 #PHP
php google或baidu分页代码
Nov 26 #PHP
You might like
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php把session写入数据库示例
2014/02/26 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
如何运行Python程序的方法
2013/04/21 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
Python OS模块常用函数说明
2015/05/23 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
Python 导入文件过程图解
2019/10/15 Python
客户表扬信范文
2014/01/10 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
逃课上网检讨书
2014/02/20 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
Python pygame实现中国象棋单机版源码
2021/06/20 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
Python机器学习之决策树和随机森林
2021/07/15 Javascript
python字符串的一些常见实用操作
2022/04/06 Python