猿问

如何解决PHP在360浏览器和火狐浏览器获取到IP地址值不同的问题?

在做微信扫码支付模式二开发,使用如下方式获取到的IP地址在不同浏览器里结果不一样,这也就导致了火狐浏览器可以出结果而360浏览器不行。
获取IP地址代码(这是微信支付开发里边的代码): $_SERVER['REMOTE_ADDR']

火狐浏览器结果:IP地址 :127.0.0.1
360急速/安全浏览器/谷歌浏览器: IP地址 :::1

请问这个问题是微信支付示例代码里边的错误,还是我自身电脑配置的错误呢?

神不在的星期二
浏览 393回答 4
4回答

MM们

进行一次判断不就解决了兼容的问题 if($ip=='::1'){ $ip='127.0.0.1'; }

大话西游666

两个实际是一样的,只不过127.0.0.1是ipv4的回环地址,::1是ipv6的。我觉得你可以试试在网卡属性里把ipv6协议关掉,不过不保证一定有用(回环不走网卡)

森栏

因此,使用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; }
随时随地看视频慕课网APP
我要回答