在php中获取IP地址

时间:2009-11-11 16:45:43

标签: php

我是这个代码来获取我的locolhost上的IP地址,我得到了

::1

结果

代码是:

function ip()
{
  if (!empty($_SERVER['HTTP_CLIENT_IP']))
  {
       $ip = $_SERVER['HTTP_CLIENT_IP'];
  } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
  {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  }
  else
  {
    $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;            
}

echo ip();

哪里出错?

实际上,我想获得国家和地区我获得IP之后的城市名称...还有其他解决方案吗?

由于

4 个答案:

答案 0 :(得分:7)

:: 1是localhost的简写,使用IPv6术语,因此它正在运行。尝试使用您的主机名进行连接,您应该看到地址更改更明显是一个地址...

答案 1 :(得分:2)

您可以使用以下内容:

    $server_address = $_SERVER['SERVER_ADDR'];
    $port_used = $_SERVER['SERVER_PORT'];
    $ip_address = $_SERVER['REMOTE_ADDR'];

// on my test machine this gives the following results:

    $server_address = 127.0.0.1
    $port_used = 80
    $ip_address = 127.0.0.1

已编辑,以包含问题的地理位置方面,在我提交原始答案后,我才注意到这一点。

我不会重复在其他地方找到的答案,而是首先链接到这个(答案很好的)SO问题: google-geolocation-api-library,然后是搜索字词geolocation php site:stackoverflow.com的Google搜索结果页面,其链接到许多其他可能相关的答案,这些答案可能比我能够更好地解决您的问题。

答案 2 :(得分:2)

@Roland写道,它是一个IPv6地址。如果您不打算在应用程序中使用IPv6,则应告知Web服务器停止侦听IPv6端口。当您发送请求时,客户端将首先尝试IPv6,如果它不起作用,那么它将回退到IPv4,您应该得到更熟悉的127.0.0.1。

答案 3 :(得分:0)

如果你是print_r($ _ SERVER),你会看到哪些信息可用,它看起来是什么,以及哪些字段可能是空的。