鍍金池/ 問(wèn)答/PHP/ 如何解決PHP在360瀏覽器和火狐瀏覽器獲取到IP地址值不同的問(wèn)題?

如何解決PHP在360瀏覽器和火狐瀏覽器獲取到IP地址值不同的問(wèn)題?

在做微信掃碼支付模式二開(kāi)發(fā),使用如下方式獲取到的IP地址在不同瀏覽器里結(jié)果不一樣,這也就導(dǎo)致了火狐瀏覽器可以出結(jié)果而360瀏覽器不行。
獲取IP地址代碼(這是微信支付開(kāi)發(fā)里邊的代碼): $_SERVER['REMOTE_ADDR']

火狐瀏覽器結(jié)果:IP地址 :127.0.0.1
360急速/安全瀏覽器/谷歌瀏覽器: IP地址 :::1

請(qǐng)問(wèn)這個(gè)問(wèn)題是微信支付示例代碼里邊的錯(cuò)誤,還是我自身電腦配置的錯(cuò)誤呢?

回答
編輯回答
玩控

兩個(gè)實(shí)際是一樣的,只不過(guò)127.0.0.1是ipv4的回環(huán)地址,::1是ipv6的。我覺(jué)得你可以試試在網(wǎng)卡屬性里把ipv6協(xié)議關(guān)掉,不過(guò)不保證一定有用(回環(huán)不走網(wǎng)卡)

2018年3月30日 21:29
編輯回答
陪妳哭

因此,使用PHP獲取客戶端IP的代碼可以如下:

function getip() {    
    $unknown = 'unknown';    
    if ( isset($_SERVER['HTTP_X_FORWARDED_FOR'])   
           && $_SERVER['HTTP_X_FORWARDED_FOR']   
           && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)   
       ) {    
           $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];    
       } elseif ( isset($_SERVER['REMOTE_ADDR'])   
           && $_SERVER['REMOTE_ADDR'] &&   
           strcasecmp($_SERVER['REMOTE_ADDR'], $unknown) )   
       {    
           $ip = $_SERVER['REMOTE_ADDR'];    
       }    
       /**   
        * 處理多層代理的情況   
        * 或者使用正則方式:$ip = preg_match("/[\d\.] 
        * {7,15}/", $ip, $matches) ? $matches[0] : $unknown;   
        */    
       if (false !== strpos($ip, ','))    
           $ip = reset(explode(',', $ip));    
       return $ip;    
   }  
2018年4月10日 04:11
編輯回答
默念

這個(gè)是因?yàn)閣in10默認(rèn)解析成IPV6地址,實(shí)際放在線上沒(méi)問(wèn)題。我把$_SERVER['REMOTE_ADDR] 轉(zhuǎn)換了一下,替換成127.0.0.1.另外就是使用127.0.0.1訪問(wèn)的話,是沒(méi)問(wèn)題的

2017年4月15日 08:57
編輯回答
脾氣硬

進(jìn)行一次判斷不就解決了兼容的問(wèn)題

if($ip=='::1'){
    $ip='127.0.0.1';
}
2017年12月26日 21:57