php 获取本机外网/公网IP的代码


Posted in PHP onMay 09, 2010

大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP,

但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。

经过我的研究有两种方法来获取用户的真实外网IP。

方法一:curl

function get_onlineip() { 
$ch = curl_init('http://www.ip138.com/ip2city.asp'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$a = curl_exec($ch); 
preg_match('/\[(.*)\]/', $a, $ip); 
return $ip[1]; 
}

方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址

function get_onlineip() { 
$onlineip = ''; 
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { 
$onlineip = getenv('HTTP_CLIENT_IP'); 
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { 
$onlineip = getenv('HTTP_X_FORWARDED_FOR'); 
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { 
$onlineip = getenv('REMOTE_ADDR'); 
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { 
$onlineip = $_SERVER['REMOTE_ADDR']; 
} 
return $onlineip; 
}
PHP 相关文章推荐
thinkphp3.0 模板中函数的使用
Nov 13 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
php检测useragent版本示例
Mar 24 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
Oct 16 PHP
JavaScript实现删除电脑的关机键
Jul 26 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 PHP
Smarty模板常见的简单应用分析
Nov 15 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 #PHP
php ob_flush,flush在ie中缓冲无效的解决方法
May 09 #PHP
php 各种应用乱码问题的解决方法
May 09 #PHP
php 输出双引号"与单引号'的方法
May 09 #PHP
php for 循环语句使用方法详细说明
May 09 #PHP
php 函数使用方法与函数定义方法
May 09 #PHP
php 获取select下拉列表框的值
May 08 #PHP
You might like
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
php验证码生成器
2017/05/24 PHP
PHP实现微信商户支付企业付款到零钱功能
2018/09/30 PHP
js模拟类继承小例子
2010/07/17 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
详解vue 组件
2020/06/11 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python解析json文件相关知识学习
2016/03/01 Python
django中send_mail功能实现详解
2018/02/06 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
军训心得体会
2013/12/31 职场文书
八年级物理教学反思
2014/01/19 职场文书
安全责任书范文
2014/08/25 职场文书
店长岗位职责
2015/02/11 职场文书
计划生育责任书
2015/05/09 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
Python实现日志实时监测的示例详解
2022/04/06 Python