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 变量类型的强制转换
Oct 23 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
用php随机生成福彩双色球号码的2种方法
Feb 04 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
php编程中echo用逗号和用点号连接的区别
Mar 26 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 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/09/04 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
express启用https使用小记
2019/05/21 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python实现全角半角转换的方法
2014/08/18 Python
python使用socket远程连接错误处理方法
2015/04/29 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
移风易俗倡议书
2014/04/15 职场文书
家庭教育的心得体会
2014/09/01 职场文书
会计求职信怎么写
2015/03/20 职场文书
结婚司仪主持词
2015/06/29 职场文书
教学副校长工作总结
2015/08/13 职场文书
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫