2012-08-08 177 views
-1

我已经在Windows 7操作系统上安装了Apache服务器2.2.22,Php 5.4.5和Mysql 5.5.27。每件事情都很好。但我没有得到IP地址。这里是我的IP地址收集代码如何在php中获得IP地址

<?php 

//Test if it is a shared client 
if (!empty($_SERVER['HTTP_CLIENT_IP'])) 
{ 
    $ip = $_SERVER['HTTP_CLIENT_IP']; 
    //Is it a proxy address 
} 
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
{ 
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} 
else 
{ 
    $ip = $_SERVER['REMOTE_ADDR']; 
} 
//The value of $ip at this point would look something like: "192.0.34.166" 
$ip = ip2long($ip); 

任何人都可以帮助我如何获得IP地址。我是否需要更改或修改Apache httpd.conf或php.ini文件来解决此问题。

+4

什么*不*你? – deceze 2012-08-08 12:01:36

+3

千万不要像这样使用它。永远不要相信客户端发送的数据在http_x_forwarded_for中可能是任何东西,它通常用于通过发送x-forwarded-for与其他头文件来欺骗用户ip,因此可以完全被屏蔽。尝试例如发送这个标题与自定义内容到cmyip.com - 它会直接显示它。 – Zaffy 2012-08-08 12:37:35

+0

这个网站上应该有比这个更好的代码 - 还有更好的评论和讨论这些代码带来的问题。 – hakre 2013-05-11 09:44:09

回答

2

您可以通过$_SERVER['SERVER_ADDR']获得服务器IP,$_SERVER['REMOTE_ADDR']将返回用户正在查看的IP地址。

+0

“服务器IP”? – deceze 2012-08-08 12:03:21

+0

OP请求服务器IP? – 2012-08-08 12:04:07

3

简单的方法来获取用户的IP地址

<?PHP 

function getUserIP() 
{ 
    $client = @$_SERVER['HTTP_CLIENT_IP']; 
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; 
    $remote = $_SERVER['REMOTE_ADDR']; 

    if(filter_var($client, FILTER_VALIDATE_IP)) 
    { 
     $ip = $client; 
    } 
    elseif(filter_var($forward, FILTER_VALIDATE_IP)) 
    { 
     $ip = $forward; 
    } 
    else 
    { 
     $ip = $remote; 
    } 

    return $ip; 
} 


$user_ip = getUserIP(); 

echo $user_ip; // Output IP address [Ex: 177.87.193.134] 


?> 
+0

你能解释一下为什么你不仅使用$ _SERVER ['REMOTE_ADDR']而且使用$ client和$ forward?我以为$ _SERVER ['REMOTE_ADDR']总是有一个值,永远不会为空。 – 2014-09-23 02:35:47

+0

@MarcusLind访客通过代理服务器连接到您的服务器。将'REMOTE_ADDR'的值替换为代理服务器IP,并存储在'HTTP_X_FORWARDED_FOR'或'HTTP_CLIENT_IP'上的真实IP。我在这两个变量上使用'@'。因为,某些代理服务器不提供访问者真实的IP地址。 – 2014-09-23 04:34:32