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 相关文章推荐
动态新闻发布的实现及其技巧
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
wordpress之wp-settings.php
Aug 17 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
PHP输出时间差函数代码
Jan 28 PHP
php获取twitter最新消息的方法
Apr 14 PHP
PHP安装memcached扩展笔记
May 28 PHP
php中smarty区域循环的方法
Jun 11 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
PHP实现文件上传与下载实例与总结
Mar 13 PHP
PHP记录和读取JSON格式日志文件
Jul 07 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备份/还原MySQL数据库的代码
2011/01/06 PHP
php数组键名技巧小结
2015/02/17 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python全局变量操作详解
2015/04/14 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
详解如何修改python中字典的键和值
2020/09/29 Python
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
护士岗前培训自我评鉴
2014/02/28 职场文书
装修施工安全责任书
2014/07/24 职场文书
小学中等生评语
2014/12/29 职场文书
初中生物教学随笔
2015/08/15 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS