2011-06-08 47 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