2011-11-23 47 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已经涵盖了它。