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实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
discuz的php防止sql注入函数
Jan 17 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
那些年一起学习的PHP(一)
Mar 21 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
PHP页面转UTF-8中文编码乱码的解决办法
Oct 20 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
php的4种常用运行方式详解
Dec 22 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 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
加速XP搜索功能堪比vista
2007/03/22 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
php进程间通讯实例分析
2016/07/11 PHP
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
详解Python中的多线程编程
2015/04/09 Python
详解Python发送邮件实例
2016/01/10 Python
Python使用爬虫猜密码
2016/02/19 Python
python基础之入门必看操作
2017/07/26 Python
基于python 字符编码的理解
2017/09/02 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
python判断设备是否联网的方法
2018/06/29 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
Python如何优雅删除字符列表空字符及None元素
2020/06/25 Python
详解python的变量缓存机制
2021/01/24 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
编辑找工作求职信范文
2013/12/16 职场文书
高三英语教学反思
2014/01/13 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
微信搭讪开场白
2015/05/28 职场文书
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL