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 相关文章推荐
PHP怎样调用MSSQL的存储过程
Oct 09 PHP
TMDPHP 模板引擎使用教程
Mar 13 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
基于php-fpm 参数的深入理解
Jun 03 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
Jun 24 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
PHP安全下载文件的方法
Apr 07 PHP
Smarty分页实现方法完整实例
May 11 PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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实现git部署的方法教程
2017/12/19 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
全面理解Python中self的用法
2016/06/04 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python中web框架的自定义创建
2019/09/08 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
初中家长评语和期望
2014/12/26 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
党员发展大会主持词
2015/07/03 职场文书
婚宴父母致辞
2015/07/27 职场文书
事业单位岗位说明书
2015/10/08 职场文书
培训心得体会怎么写
2016/01/25 职场文书
导游词之镜泊湖
2019/12/09 职场文书
Django程序的优化技巧
2021/04/29 Python
python元组打包和解包过程详解
2021/08/02 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技