php获得用户ip地址的比较不错的方法


Posted in PHP onFebruary 08, 2014

REMOTE_ADDR只能获取访问者本地连接中设置的IP,如某大学校园网中自己设置的10.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址,如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实IP。如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。

下面提供一个函数:

<?php // 定义一个函数getIP() 
function getIP() 
{ 
global $ip; 
if (getenv("HTTP_CLIENT_IP")) 
$ip = getenv("HTTP_CLIENT_IP"); 
else if(getenv("HTTP_X_FORWARDED_FOR")) 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
else if(getenv("REMOTE_ADDR")) 
$ip = getenv("REMOTE_ADDR"); 
else 
$ip = "Unknow"; 
return $ip; 
} 
// 使用方法: 
echo getIP(); 
?>

getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。

但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。

else if(getenv("HTTP_X_FORWARDED_FOR")) 
$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。

这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR")) 
$ip = getenv("REMOTE_ADDR");

这两行语句获得客户端的IP地址也是真实的IP地址。
PHP 相关文章推荐
php&amp;java(一)
Oct 09 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
php 什么是PEAR?
Mar 19 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
ThinkPHP开发框架函数详解:C方法
Aug 14 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
php数组分页实现方法
Apr 30 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
php全角字符转换为半角函数
Feb 07 #PHP
二进制交叉权限微型php类分享
Feb 07 #PHP
php stripslashes和addslashes的区别
Feb 03 #PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 #PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 #PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 #PHP
分享一个超好用的php header下载函数
Jan 31 #PHP
You might like
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
PHP7新特性简述
2017/06/11 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
js编写简易的计算器
2020/07/29 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
python机器学习之神经网络(一)
2017/12/20 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
基于python代码批量处理图片resize
2020/06/04 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
.NET面试问题集
2015/12/08 面试题
如何开发一个JQuery插件
2016/07/28 面试题
单位消防安全制度
2014/01/12 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
锦旗标语大全
2014/06/23 职场文书
社区护士演讲稿
2014/08/27 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
自我工作评价范文
2015/03/06 职场文书
消防演习感想
2015/08/10 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python