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 09 PHP
php 过滤危险html代码
Jun 29 PHP
PHP 获取远程文件内容的函数代码
Mar 24 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
php微信开发之图片回复功能
Jun 14 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
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学习 字符串课件
2008/06/15 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
python增加图像对比度的方法
2019/07/12 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
创建卫生先进单位实施方案
2014/03/10 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
九年级历史教学反思
2016/02/19 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python
V Rising 服务器搭建图文教程
2022/06/16 Servers