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中在数据库中保存Checkbox数据(2)
Oct 09 PHP
php基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
利用php输出不同的心形图案
Apr 22 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 PHP
PHP实现抽奖功能实例代码
Jun 30 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 验证码制作(网树注释思想)
2009/07/20 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
php调用c接口无错版介绍
2014/03/11 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
JavaScript Split()方法
2015/12/18 Javascript
JS hashMap实例详解
2016/05/26 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
pow在python中的含义及用法
2019/07/11 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python进阶之自定义可迭代的类
2019/08/20 Python
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
四风问题自查自纠工作情况报告
2014/10/28 职场文书
委托培训协议书
2014/11/17 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
运动会通讯稿300字
2015/07/20 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Vue全局事件总线你了解吗
2022/02/24 Vue.js