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中动态显示签名和ip原理
Mar 28 PHP
PHP 设计模式之观察者模式介绍
Feb 22 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
浅谈php和.net的区别
Sep 28 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP+ajax实现获取新闻数据简单示例
May 08 PHP
PHP+mysql实现的三级联动菜单功能示例
Feb 15 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 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
xml+php动态载入与分页
2006/10/09 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php 可变函数使用小结
2018/06/12 PHP
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
Python的动态重新封装的教程
2015/04/11 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
python 读取、写入txt文件的示例
2020/09/27 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
单位介绍信范文
2014/01/18 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
个人自查自纠材料
2014/10/14 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书