首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自数组的PHP限制

来自数组的PHP限制
EN

Stack Overflow用户
提问于 2012-12-29 10:49:10
回答 3查看 1.7K关注 0票数 0

(1.)我希望允许访问者从某个IP地址范围访问页面(第2段)。很容易添加更多的IP地址到IP地址列表。

我的正则表达式数组是:

代码语言:javascript
运行
复制
$IP_LIST_ACCESS = array(  
"/^188\.133\.11\.([1-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))$/"  
,"/^188\.133\.14\.([1-9]|[1-9][0-9]|1([0-1][0-9]|2[0-8]))$/"  
,"/^127\.0\.0\.1$/"                                                         
);

上述阵列的(2.) IP范围为188.133.11.1-188.133.11.254188.136.14.1-188.136.14.128127.0.0.1

下面是我的代码,用来检测错误的ip地址和死:

代码语言:javascript
运行
复制
$USER_IP_ADDR = $_SERVER['REMOTE_ADDR'];
foreach ($IP_LIST_ACCESS as $IP_ACC_ARRAY)
{
  if (!preg_match($IP_ACC_ARRAY, $USER_IP_ADDR))
  {
    echo '#INVALID IP'; #DEBUG
    die;
  }
}

(3.)与我的上述代码,总是给INVALID IP错误(总是检测为错误的IP地址)。

,问题在哪里?

编辑

(4.) --我只想这样做,如果有更好的方法的话,用preg_match就不确切了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-29 10:57:11

更好地使用ip2long内置的regex,它的易用性和更好的性能。

代码语言:javascript
运行
复制
$ip_ranges = array(
    array(
        'from' => ip2long('188.133.11.1'),
        'to' => ip2long('188.133.11.254')
    ),
    array(
        'from' => ip2long('188.136.14.1'),
        'to' => ip2long('188.136.14.128')
    ),
    array(
        'from' => ip2long('127.0.0.0'),
        'to' => ip2long('127.255.255.255')
    ),
);

$USER_IP_ADDR = $_SERVER['REMOTE_ADDR'];
$USER_IP_ADDR_LONG = ip2long($USER_IP_ADDR);

$USER_IS_PERMITTED = false;
foreach ($ip_ranges as $ip_range) {
    if ($ip_range['from'] <= $USER_IP_ADDR_LONG && $ip_range['to'] >= $USER_IP_ADDR_LONG) {
        $USER_IS_PERMITTED = true;
    }
}


if (!$USER_IS_PERMITTED) {
    echo '#INVALID IP: ' . $USER_IP_ADDR; #DEBUG
    die;
}
票数 3
EN

Stack Overflow用户

发布于 2012-12-29 10:54:53

看看ip2long(),它从它的Internet标准格式(虚线字符串)表示生成一个IPv4互联网网络地址。

稍后,您可以对其执行范围操作。

票数 1
EN

Stack Overflow用户

发布于 2012-12-29 10:59:39

我很肯定你想要if (preg_match($IP_ACC_ARRAY, $USER_IP_ADDR) === 1)。现在,如果错误不匹配,则显示错误。这是最快的解决方案,但也许其他答案中提出的ip2long-based解决方案是最正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14080916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档