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默认安装产生系统漏洞
Oct 09 PHP
php无限极分类实现的两种解决方法
Apr 28 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
php编程每天必学之表单验证
Mar 01 PHP
简述php环境搭建与配置
Dec 05 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
php往mysql中批量插入数据实例教程
Dec 12 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
PHP+Ajax简单get验证操作示例
Mar 02 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
php简单获取目录列表的方法
2015/03/24 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
使用Python写CUDA程序的方法
2017/03/27 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
Python: glob匹配文件的操作
2020/12/11 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
人力资源管理毕业生自荐信
2014/06/26 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
社区母亲节活动总结
2015/02/10 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js