• 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 2

    PHP获取ip

    Posted by 撒得一地 on 2016年7月28日 in PHP笔记
    国外稳定加速器推荐    Express | Vypr

    在PHP开发过程中,很经常要获取到用户ip(客户端ip)。比如投票,不同区域的ip展示不同的内容等都。一般来说,获取用户ip有下面几种方法。

    PHP 获取客户端ip

    在贴出代码前,先分析用户 ip 可能存在的情况:

    一、没有使用代理服务器的情况:

    	REMOTE_ADDR = 您的 IP
    	HTTP_VIA = 没数值或不显示
    	HTTP_X_FORWARDED_FOR = 没数值或不显示
    

    二、使用透明代理服务器的情况:Transparent Proxies

    	REMOTE_ADDR = 最后一个代理服务器 IP
    	HTTP_VIA = 代理服务器 IP
    	HTTP_X_FORWARDED_FOR = 您的真实 IP 
    

    这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

    三、使用普通匿名代理服务器的情况:Anonymous Proxies

    	REMOTE_ADDR = 最后一个代理服务器 IP
    	HTTP_VIA = 代理服务器 IP
    	HTTP_X_FORWARDED_FOR = 代理服务器 IP 
    

    隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

    四、使用欺骗性代理服务器的情况:Distorting Proxies

    	REMOTE_ADDR = 代理服务器 IP
    	HTTP_VIA = 代理服务器 IP
    	HTTP_X_FORWARDED_FOR = 随机的 IP 
    

    告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

    五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

    	REMOTE_ADDR = 代理服务器 IP
    	HTTP_VIA = 没数值或不显示
    	HTTP_X_FORWARDED_FOR = 没数值或不显示
    

    全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

    REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。

    HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。

    $_SERVER[‘REMOTE_ADDR’]; //访问端(有可能是用户,有可能是代理的)IP

    $_SERVER[‘HTTP_CLIENT_IP’];  //代理端的(有可能存在,可伪造)

    $_SERVER[‘HTTP_X_FORWARDED_FOR’]; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

    通过上面的介绍可知,通过程序获得的用户 ip ,也无法保证获取到的ip是百分百用户的真实 ip。

    PHP获取客户端ip代码实现

    第一种方法

    	function get_real_ip(){ 
    	    $ip=false; 
    	    if(!empty($_SERVER['HTTP_CLIENT_IP'])){ 
    	        $ip=$_SERVER['HTTP_CLIENT_IP']; 
    	    }
    
    	    if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
    	        $ips=explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']); 
    
    	        if($ip){ array_unshift($ips, $ip); $ip=FALSE; }
    
    	        for ($i=0; $i < count($ips); $i++){
    	            if(!eregi ('^(10│172.16│192.168).', $ips[$i])){
    	                $ip=$ips[$i];
    	                break;
    	            }
    	        }
    	    }
    	    return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); 
    	}
    

    第二种方法:

    	function get_real_ip(){
    	    static $realip;
    
    	    if(isset($_SERVER)){
    	        if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
    
    	            $realip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    
    	        }else if(isset($_SERVER['HTTP_CLIENT_IP'])){
    
    	            $realip=$_SERVER['HTTP_CLIENT_IP'];
    
    	        }else{
    
    	            $realip=$_SERVER['REMOTE_ADDR'];
    
    	        }
    
    	    }else{
    
    	        if(getenv('HTTP_X_FORWARDED_FOR')){
    
    	            $realip=getenv('HTTP_X_FORWARDED_FOR');
    
    	        }else if(getenv('HTTP_CLIENT_IP')){
    
    	            $realip=getenv('HTTP_CLIENT_IP');
    
    	        }else{
    
    	            $realip=getenv('REMOTE_ADDR');
    
    	        }
    
    	    }
    
    	    return $realip;
    	}
    

    第三种方法,摘自DISCUZ,应该还不错吧!

    	// 获取IP地址(摘自discuz)
    	function getIp(){
    	    $ip='未知IP';
    
    	    if(!empty($_SERVER['HTTP_CLIENT_IP'])){
    
    	        return is_ip($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:$ip;
    
    	    }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    
    	        return is_ip($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$ip;
    
    	    }else{
    
    	        return is_ip($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:$ip;
    
    	    }
    
    	}
    
    	function is_ip($str){
    
    	    $ip=explode('.',$str);
    
    	    for($i=0;$i<count($ip);$i++){  
    	        if($ip[$i]>255){  
    	            return false;  
    	        }  
    	    }  
    	    return preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$str);  
    	}
    

    PHP获取服务器ip

    在 PHP 中,我们一般通过$_SERVER[‘HTTP_HOST’]来活得URL中网站的域名或者ip地址。

    PHP 手册中的解释如下:“HTTP_HOST”,当前请求的 Host: 头信息的内容。

    如果我们的项目搭在内容,用外网服务器做转发,那么使用 $_SERVER[‘HTTP_HOST’] 获得的是内网ip,如果你想获得外网ip,那么可以:

    $host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
    

    上一篇:

    下一篇:

    相关推荐

    2 Comments

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    4 + 4 = ?

    网站地图|广东快乐10分开奖直播

    Copyright © 2015-2019 广东快乐10分开奖直播 All rights reserved.
    闽ICP备15015576号-1,版权所有?psz.

  • 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 新时时彩赚钱技术 重庆时时彩改欢乐生肖了吗 4场进球中奖规则 好运快3开奖 广西快乐十分非凡彩票 顶呱刮星座奇缘 赌博网 怎么投诉高频彩 竞猜半全场怎么看 牛牛热视频在线观看 七乐彩中六个基本号 排列五走势图 超级大乐透开奖结果 中国体育彩票网 中国福利彩票3d官方字谜 pc蛋蛋幸运28怎么挂机