php的ip获取

Vincent_1990 2011-01-18 08:00:49
为什么我用以下代码获取的ip是“::1”而不是“127.0.0.1”?注:我用的是xampp套件
<?php
$iipp=$_SERVER["REMOTE_ADDR"];
echo $iipp;
?>
...全文
155 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Abin-2008 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vincent_1990 的回复:]

我的朋友用echo $_SERVER['REMOTE_ADDR']可以测出“127.0.0.1”所以我在想是不是我的apache哪里设置没搞好?
[/Quote]

你們的IP地址不同...他的可能是ipv4 而你的是不是ipv6啊?
Vincent_1990 2011-01-20
  • 打赏
  • 举报
回复
我的朋友用echo $_SERVER['REMOTE_ADDR']可以测出“127.0.0.1”所以我在想是不是我的apache哪里设置没搞好?
Vincent_1990 2011-01-20
  • 打赏
  • 举报
回复
但是我用ipconfig查了一下,所有的ipv6都没有出现连续零
而且我用下面代码获取的输出结果是前面两个为空,后面两个为“::1”
<?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']);
}

echo $_SERVER['HTTP_CLIENT_IP']."<br />";
echo $_SERVER['HTTP_X_FORWARDED_FOR']."<br />";
echo $_SERVER['REMOTE_ADDR']."<br />";
echo get_real_ip();
?>
ihefe 2011-01-19
  • 打赏
  • 举报
回复
print_r($_SERVER);//找找你想要的。

“::1” 这种情况应该是你的ip没有设置
奇乐二二二 2011-01-19
  • 打赏
  • 举报
回复
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;
}


这个是我经常用得 再不行就是你的问题了
何牧晗 2011-01-19
  • 打赏
  • 举报
回复
在其他电脑测试的话就是IP了 ^_^
何牧晗 2011-01-19
  • 打赏
  • 举报
回复
是在本地服务器测试的原因吧,你用别的电脑访问下你的网站试下。
Mkobe 2011-01-19
  • 打赏
  • 举报
回复
呵呵,学到新东西了
skyaspnet 2011-01-19
  • 打赏
  • 举报
回复
应该是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 节点之间的兼容性。

Vincent_1990 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chhxxc 的回复:]

PHP code
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……
[/Quote]
还是“::1”
奇乐二二二 2011-01-18
  • 打赏
  • 举报
回复
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();
?>

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧