Home  >  Q&A  >  body text

PHP如何只获得ipv4的地址

希望根据不同的ip地址段,网站显示不同的内容。目前针对ipv4的地址段做了限制,但是有些客户端访问是通过ipv6的地址访问,做的限制就没有用了。所以我想问一下,有没有可能通过php只获取ipv4的代码。
目前使用的php获取ip的代码如下:

function check_ip($str)
    {
        return preg_match('/""A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))"".){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))""Z/',$str)>0;
    }

    function getIP($isHeader=false)
    {
        if($isHeader)
        {
            if (isset($_SERVER['HTTP_CLIENT_IP']) && check_ip($_SERVER['HTTP_CLIENT_IP']))
            {
                return $_SERVER['HTTP_CLIENT_IP'];
            }
            else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && check_ip($_SERVER['HTTP_X_FORWARDED_FOR']))
            {
                return $_SERVER['HTTP_X_FORWARDED_FOR'];
            }
        }
        if (isset($_SERVER['REMOTE_ADDR']) && check_ip($_SERVER['REMOTE_ADDR']))
        {
            return $_SERVER['REMOTE_ADDR'];
        }
        else
        {
            return 'unknown';
        }
    }
PHPzPHPz2630 days ago1610

reply all(1)I'll reply

  • 大家讲道理

    大家讲道理2017-04-10 17:02:22

    你看一下这个能不能解决你的问题吧,就是可以根据用户环境获取IP地址

    <?php 
    function getIP() /*获取客户端IP*/ 
    { 
    if (@$_SERVER["HTTP_X_FORWARDED_FOR"]) 
    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
    else if (@$_SERVER["HTTP_CLIENT_IP"]) 
    $ip = $_SERVER["HTTP_CLIENT_IP"]; 
    else if (@$_SERVER["REMOTE_ADDR"]) 
    $ip = $_SERVER["REMOTE_ADDR"]; 
    else if (@getenv("HTTP_X_FORWARDED_FOR")) 
    $ip = getenv("HTTP_X_FORWARDED_FOR"); 
    else if (@getenv("HTTP_CLIENT_IP")) 
    $ip = getenv("HTTP_CLIENT_IP"); 
    else if (@getenv("REMOTE_ADDR")) 
    $ip = getenv("REMOTE_ADDR"); 
    else 
    $ip = "Unknown"; 
    return $ip; 
    } 
    ?> 

    参考 非常实用的PHP常用函数汇总的第10点,有兴趣的话你可以看一下

    reply
    0
  • Cancelreply