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学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
php实现分页显示
Nov 03 PHP
PHP文件上传类实例详解
Apr 08 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 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生成文件
2007/01/15 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
Jquery 弹出层插件实现代码
2009/10/24 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
Python获取系统默认字符编码的方法
2015/06/04 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Python hashlib模块用法实例分析
2018/06/12 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
python:动态路由的Flask程序代码
2019/11/22 Python
python实现低通滤波器代码
2020/02/26 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
Python 爬虫的原理
2020/07/30 Python
土木工程专业个人求职信
2013/12/30 职场文书
世界遗产导游词
2015/02/13 职场文书
交通事故案件代理词
2015/05/23 职场文书
八年级作文之友谊
2019/12/02 职场文书
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android