2011-11-23 64 views
0

嘿,這裏的時候,我嘗試運行此獲得一個IP PHP新手它給我PHP IP請求給錯誤

致命錯誤:無法訪問自::當沒有類範圍是在/ home /含量主動/ 56/6442856/html/unlocking/Untitled-4.php on line 14

我在做什麼錯在這裏?

另外,請記住:PHP新手在這裏,所以儘可能的解釋一下。

感謝

<?php 
function get_ip_address() 
{ 
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) 
    { 
     if (array_key_exists($key, $_SERVER) === true) 
     { 
      foreach (explode(',', $_SERVER[$key]) as $ip) 
      { 
       $ip = trim($ip); // just to be safe 

       if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) 
       { 
        self::$ip = $ip; return $ip; 
       } 
      } 
     } 
    } 
} 

get_ip_address(); 
echo $ip; 
?> 

回答

3
function get_ip_address() 
{ 
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) 
    { 
     if (array_key_exists($key, $_SERVER) === true) 
     { 
      foreach (explode(',', $_SERVER[$key]) as $ip) 
      { 
       $ip = trim($ip); // just to be safe 

       if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) 
       { 
        return $ip; 
       } 
      } 
     } 
    } 
} 

echo get_ip_address(); 

而且我不知道你是否真的需要這樣的功能來獲取客戶端的IP地址。

echo $_SERVER['REMOTE_ADDR']; 

可能是足夠IMO

+0

+1 - 但是,請解釋OP爲什麼他不應該在這種情況下使用自己。 –

+0

我不能在這裏解釋整個OO編程:D ...但也許他可以從這裏開始:http://php.net/manual/en/language.oop5.php – dynamic

+0

嗯試過,它的工作原理,但是當我檢查頁面hidemyass.com它給了我的代理IP,而不是我的。這是正常的嗎? –

1

你得到,因爲這一行的錯誤:

self::$ip = $ip; return $ip; 

您使用self當你是一個類的內部並參照其靜態之一成員:

class Foo 
{ 
    public static $my_static = 'foo'; 

    public function staticValue() { 
     return self::$my_static; //It's correctly used here 
    } 
} 

至於你的問題特定的解決方案yes123已經涵蓋了它。