导航:首页 > 编程语言 > phpcurlremoteaddr

phpcurlremoteaddr

发布时间:2023-03-07 11:37:27

1. 学习php,用$_GET['REMOTE_ADDR']获取用户IP不成功

是$_SERVER里的,不是GET
直接用这个代码获取 吧,所有情况都考虑进去了。

$ip = !empty($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] :
(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] :
(!empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unknown'));

2. php如何获取请求接口资源的请求者的IP地址

/**
*获取客户端IP地址
*@paraminteger$type
*@returnmixed
*/
functiongetclientip(){
static$realip=NULL;

if($realip!==NULL){
return$realip;
}
if(isset($_SERVER)){
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){//但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。要想透过代理服务器取得客户端的真实IP地址,就要使用$_SERVER["HTTP_X_FORWARDED_FOR"]来读取。
$arr=explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
/*取X-Forwarded-For中第一个非unknown的有效IP字符串*/
foreach($arrAS$ip){
$ip=trim($ip);
if($ip!='unknown'){
$realip=$ip;
break;
}
}
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){//HTTP_CLIENT_IP是代理服务器发送的HTTP头。如果是"超级匿名代理",则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$realip=$_SERVER['HTTP_CLIENT_IP'];
}else{
if(isset($_SERVER['REMOTE_ADDR'])){//正在浏览当前页面用户的IP地址
$realip=$_SERVER['REMOTE_ADDR'];
}else{
$realip='0.0.0.0';
}
}
}else{
//getenv环境变量的值
if(getenv('HTTP_X_FORWARDED_FOR')){//但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。要想透过代理服务器取得客户端的真实IP地址
$realip=getenv('HTTP_X_FORWARDED_FOR');
}elseif(getenv('HTTP_CLIENT_IP')){//获取客户端IP
$realip=getenv('HTTP_CLIENT_IP');
}else{
$realip=getenv('REMOTE_ADDR');//正在浏览当前页面用户的IP地址
}
}
preg_match("/[d.]{7,15}/",$realip,$onlineip);
$realip=!empty($onlineip[0])?$onlineip[0]:'0.0.0.0';
return$realip;
}

3. php获取本机主板网卡IP地址.跳转读取相应的数据

大家一般都是用$_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;
}

4. 网站通过SSL加密,PHP如何获取用户的真实IPREMOTE_ADDR获得的只是局域网IP。急急急 在线等

这个和SSL加密没有关系的

<?php
// 定义一个函数getIP()
function getIP()
{
global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "Unknow";
return $ip;
}
// 使用方法:
echo getIP();
?>

getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。

else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。
这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");

这两行语句获得客户端的IP地址也是真实的IP地址。

阅读全文

与phpcurlremoteaddr相关的资料

热点内容
scan调度算法详细过程 浏览:163
二手房交易系统源码 浏览:136
文件夹怎么快速去重 浏览:790
单片机原理与应用视频资源 浏览:880
云服务器国内如何注册 浏览:584
java值类型和引用类型 浏览:515
金山词霸如何pdf取词 浏览:733
t3软加密解绑 浏览:399
s8sp加密路线直接下载 浏览:570
不许宣读命令 浏览:698
寻找信号源源码 浏览:81
打电话老服务器错误是什么原因 浏览:491
三维溯源码 浏览:716
android录音开源 浏览:459
弗洛伊德算法c 浏览:12
udp命令字 浏览:663
app服务端java源码 浏览:798
电脑用文件夹玩大型游戏 浏览:254
安卓耳塞失灵怎么办 浏览:765
华三交换机保存命令 浏览:605