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下安装配置fckeditor编辑器的方法
Mar 02 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Jun 13 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 PHP
WAF的正确bypass
Jan 05 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 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 array_key_exists() 与 isset() 的区别
2016/10/24 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
JavaScript触发器详解
2007/03/10 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
图文详解WinPE下安装Python
2016/05/17 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python调用飞书发送消息的示例
2020/11/10 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
股份转让协议书
2014/04/12 职场文书
心理健康日活动总结
2014/05/08 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
JS class语法糖的深入剖析
2022/07/07 Javascript