2012-08-08 124 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