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

yipeiwu_com6年前PHP代码库
大家一般都是用$_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接口隔离原则。分享给大家供大家参考,具体如下: 使用多个专门的接口比使用单一的总接口要好。 一个类对另外一个类的依赖性应当是建立在最小的接口上的。 一个接口代表一个角...

php 修改、增加xml结点属性的实现代码

php 修改 增加xml结点属性的代码,供大家学习参考。php修改xml结点属性,增加xml结点属性的代码,有需要的朋友,参考下。 1、xml文件 复制代码 代码如下:<?xml...

php 广告调用类代码(支持Flash调用)

调用方式如下:其中DebugStr这个函数就是类似一个echo。 复制代码 代码如下: DebugStr('$Adv->getContentById($id); $id为广告编号,...

详解WordPress开发中的get_post与get_posts函数使用

get_post() 在一般主题制作时,get_post()函数我们一般很少会用到,但因为后面会讲到get_posts(),所以我们不得不先讲一下这个单数形式。这个函数的主要作用是,将...

PHP编程函数安全篇

对于我们想做web安全的人来说,最好就是拿来学习,可是万物抓根源,我们要的不是鱼而是渔。在国内,各种各样的php程序1.0版,2.0版像雨后春笋一样的冒出来,可是,大家关注的都是一些著名...