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的access操作类
Apr 09 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
php实现TCP端口检测的方法
Apr 01 PHP
浅谈php提交form表单
Jul 01 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
PHP简单实现防止SQL注入的方法
Mar 13 PHP
让whoops帮我们告别ThinkPHP6的异常页面
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统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
PHP 验证码的实现代码
2011/07/17 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python的time模块中的常用方法整理
2015/06/18 Python
Python导入oracle数据的方法
2015/07/10 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
python集合常见运算案例解析
2019/10/17 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
五水共治捐款倡议书
2014/05/14 职场文书
交通工程专业推荐信
2014/09/06 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android