2011-06-08 50 views
1

可能重复:
How do I find a user's IP address with PHP?PHP - 获取公网IP

我有我的PHP页面的表单。用户填写他的凭证和消息并按下发送。我通过电子邮件得到他的问题,并可以回答他。

但是我也想把这个人的公共IP加入到邮件中,这可能吗?

非常感谢!

+1

你为什么要这样做? – 2011-06-08 22:02:45

回答

-4

您可以使用下面的代码:

$ip = $REMOTE_ADDR; 
+2

你不应该依靠注册全局变量来开启。 – 2011-06-08 22:04:29

+0

我认为这需要'register_globals' – 2011-06-08 22:04:53

1

您可以使用$_SERVER["REMOTE_ADDR"]。但它不一定可靠。

+0

我不知道任何欺骗REMOTE_ADDR锻造IP数据包的方法。但是,值得注意的是,REMOTE_ADDR可能是代理的地址(即使是你自己设置的),而不是远程用户。例如,我在npache前面有nginx,所以apache收到的REMOTE_ADDR就是我的nginx服务器。 – 2011-06-08 22:06:22

+0

@Frank:这大概是我暗示的! – 2011-06-08 22:07:45

1

您可以使用$_SERVER['REMOTE_ADDR']但如果你真的想确保你得到正确的IP,而不是代理IP,然后我发现这个功能是有帮助的

注:我不是这个代码的拥有者,我发现它在互联网上的某处

function get_real_ip() 
{ 

    if (isset($_SERVER["HTTP_CLIENT_IP"])) 
    { 
     return $_SERVER["HTTP_CLIENT_IP"]; 
    } 
    elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) 
    { 
     return $_SERVER["HTTP_X_FORWARDED_FOR"]; 
    } 
    elseif (isset($_SERVER["HTTP_X_FORWARDED"])) 
    { 
     return $_SERVER["HTTP_X_FORWARDED"]; 
    } 
    elseif (isset($_SERVER["HTTP_FORWARDED_FOR"])) 
    { 
     return $_SERVER["HTTP_FORWARDED_FOR"]; 
    } 
    elseif (isset($_SERVER["HTTP_FORWARDED"])) 
    { 
     return $_SERVER["HTTP_FORWARDED"]; 
    } 
    else 
    { 
     return $_SERVER["REMOTE_ADDR"]; 
    } 
} 
+1

是的,请让这些代码片段流行起来,这样很容易欺骗邮件脚本。 – hakre 2011-06-08 22:16:22

+0

所有'$ _SERVER [“HTTP _ *”]'变量都是微不足道的。 – 2011-06-08 22:21:10

+0

有效的点,但真正的工作是什么?我个人保存'$ _SERVER [“REMOTE_ADDR”]'和任何其他转发类型var我可以找到。 – 2011-06-08 22:29:07