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
建立动态的WML站点(一)
Oct 09 PHP
全文搜索和替换
Oct 09 PHP
PHP 中dirname(_file_)讲解
Mar 18 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
浅谈php中include文件变量作用域
Jun 18 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
PHP处理二进制数据的实现方法
Jun 13 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 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
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python按钮的响应事件详解
2019/03/04 Python
Python sorted排序方法如何实现
2020/03/31 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
应届生个人求职信模板
2013/11/26 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
写给爸爸的道歉信
2014/01/15 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
个人委托函范文
2015/01/29 职场文书
社区党支部承诺书
2015/04/29 职场文书
交通事故被告答辩状
2015/05/22 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
Python实现双向链表基本操作
2022/05/25 Python