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 相关文章推荐
10条PHP编程习惯助你找工作
Sep 29 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
php实现对象克隆的方法
Jun 20 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
php解决安全问题的方法实例
Sep 19 PHP
解决laravel查询构造器中的别名问题
Oct 17 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 PHP
tp5.1 框架查询表达式用法详解
May 25 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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
第一个无线电台是由谁发明的
2021/03/01 无线电
mysql5详细安装教程
2007/01/15 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
跟我学Laravel之视图 & Response
2014/10/15 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
javascript生成大小写字母
2015/07/03 Javascript
js面向对象的写法
2016/02/19 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
简单谈谈python中的多进程
2016/11/06 Python
python实现各进制转换的总结大全
2017/06/18 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
python多线程http压力测试脚本
2019/06/25 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
基于Python实现粒子滤波效果
2020/12/01 Python
智能旅行箱:Horizn Studios
2018/04/30 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
2014年上半年工作自我评价
2014/01/18 职场文书
职工运动会感言
2014/02/07 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
运动会通讯稿200字
2015/07/20 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript