php的ip获取 为什么我用以下代码获取的ip是“::1”而不是“127.0.0.1”?注:我用的是xampp套件<?php$iipp=$_SERVER["REMOTE_ADDR"];echo $iipp;?> 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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']);}echo get_real_ip();?> public function IP(){//获取IP if ($_SERVER['REMOTE_ADDR']) $XXC_IP_IP=$_SERVER['REMOTE_ADDR']; else if(getenv("REMOTE_ADDR")) $XXC_IP_IP=getenv("REMOTE_ADDR"); elseif (getenv("HTTP_CLIENT_IP")) $XXC_IP_IP=getenv("HTTP_CLIENT_IP"); else $XXC_IP_IP="unknown"; return $XXC_IP_IP; }这个是我经常用得 再不行就是你的问题了 print_r($_SERVER);//找找你想要的。“::1” 这种情况应该是你的ip没有设置 应该是IPV6协议的问题,检查一下你机子的网络是否已经安装了IPV6的协议IPv6 地址大小为 128 位。首选 IPv6 地址表示法为 x:x:x:x:x:x:x:x,其中每个 x 是地址的 8 个 16 位部分的十六进制值。IPv6 地址范围从 0000:0000:0000:0000:0000:0000:0000:0000 至 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。除此首选格式之外,IPv6 地址还可以用其他两种短格式指定:省略前导零 通过省略前导零指定 IPv6 地址。例如,IPv6 地址 1050:0000:0000:0000:0005:0600:300c:326b 可写作 1050:0:0:0:5:600:300c:326b。 双冒号 通过使用双冒号(::)替换一系列零来指定 IPv6 地址。例如,IPv6 地址 ff06:0:0:0:0:0:0:c3 可写作 ff06::c3。一个 IP 地址中只可使用一次双冒号。 IPv6 地址的替代格式组合了冒号与点分表示法,因此可将 IPv4 地址嵌入到 IPv6 地址中。对最左边 96 个位指定十六进制值,对最右边 32 个位指定十进制值,来指示嵌入的 IPv4 地址。在混合的网络环境中工作时,此格式确保 IPv6 节点和 IPv4 节点之间的兼容性。 但是我用ipconfig查了一下,所有的ipv6都没有出现连续零而且我用下面代码获取的输出结果是前面两个为空,后面两个为“::1”<?php// 获取用户真实 IPfunction 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']);}echo $_SERVER['HTTP_CLIENT_IP']."<br />";echo $_SERVER['HTTP_X_FORWARDED_FOR']."<br />";echo $_SERVER['REMOTE_ADDR']."<br />";echo get_real_ip();?> 我的朋友用echo $_SERVER['REMOTE_ADDR']可以测出“127.0.0.1”所以我在想是不是我的apache哪里设置没搞好? 你們的IP地址不同...他的可能是ipv4 而你的是不是ipv6啊? 请教合适的算法。 求一个PHP分页显示图片的代码 PHP练习题 高手解答一下 php怎样将数字拆分? PHP 自定义函数如何书写“可选参数” php调用存储过程两次就出错 怎样取得内网IP? 大家帮忙看一下这个递归函数哪儿错了! HIS与PHP PHP连续问题三则。请进 PHP程序如何向远程主机发送数据? - 听说标题越长越容易引起注意~~ php5连接mysql的问题
$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']);
}echo get_real_ip();
?>
if ($_SERVER['REMOTE_ADDR'])
$XXC_IP_IP=$_SERVER['REMOTE_ADDR'];
else if(getenv("REMOTE_ADDR"))
$XXC_IP_IP=getenv("REMOTE_ADDR");
elseif (getenv("HTTP_CLIENT_IP"))
$XXC_IP_IP=getenv("HTTP_CLIENT_IP");
else
$XXC_IP_IP="unknown";
return $XXC_IP_IP;
}这个是我经常用得 再不行就是你的问题了
省略前导零
通过省略前导零指定 IPv6 地址。例如,IPv6 地址 1050:0000:0000:0000:0005:0600:300c:326b 可写作 1050:0:0:0:5:600:300c:326b。
双冒号
通过使用双冒号(::)替换一系列零来指定 IPv6 地址。例如,IPv6 地址 ff06:0:0:0:0:0:0:c3 可写作 ff06::c3。一个 IP 地址中只可使用一次双冒号。
IPv6 地址的替代格式组合了冒号与点分表示法,因此可将 IPv4 地址嵌入到 IPv6 地址中。对最左边 96 个位指定十六进制值,对最右边 32 个位指定十进制值,来指示嵌入的 IPv4 地址。在混合的网络环境中工作时,此格式确保 IPv6 节点和 IPv4 节点之间的兼容性。
而且我用下面代码获取的输出结果是前面两个为空,后面两个为“::1”
<?php// 获取用户真实 IPfunction 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']);
}echo $_SERVER['HTTP_CLIENT_IP']."<br />";
echo $_SERVER['HTTP_X_FORWARDED_FOR']."<br />";
echo $_SERVER['REMOTE_ADDR']."<br />";
echo get_real_ip();
?>
你們的IP地址不同...他的可能是ipv4 而你的是不是ipv6啊?