PHP限制IP访问,授权IP,授权域名

教程分享 8 浏览 1 回复 返回上级

标题:PHP IP访问限制与域名授权

这款代码能够帮助您实现PHP对IP访问的限制以及域名的授权,它支持单个或多个IP地址,以及使用通配符和IP段进行设置。功能全面,包括黑白名单的设置,是PHP操作代码中的经典之作。

下面是代码的示例:

<?php
// 限制域名测试
$domain = '2.baidu.com';
$domain_list = '*.baidu.com,qq.com';
if (in_host($domain, $domain_list)) {
    echo '域名允许访问';
} else {
    echo '域名不允许访问';
}
// 限制IP测试
$host = '127.1.1.88';
$list = '127.0.0.*,192.168.1.1,192.168.1.70,127.1.1.33-127.1.1.100';
if (in_host($host, $list)) {
    echo 'IP允许访问';
} else {
    echo 'IP不允许访问';
}?>

代码详细说明:

/**
 * HOST访问限制 支持 IP(单IP,多IP,*通配符,IP段) 域名(单域名,多域名,*通配符)
 * 根据判断实现IP地址 白名单黑名单
 * Author:70(qq991612563)
 * @param unknown $host 当前host 127.0.0.2
 * @param unknown $list 允许的host列表 127.0.0.*,192.168.1.1,192.168.1.70,127.1.1.33-127.1.1.100
 * @return boolean
 */function in_host($host, $list) {
    $list = ',' . $list . ',';
    $is_in = false;
    // 1.判断最简单的情况
    $is_in = strpos($list, ',' . $host . ',') === false ? false : true;
    // 2.判断通配符情况
    if (!$is_in && strpos($list, '*') !== false) {
        $hosts = array();
        $hosts = explode('.', $host);
        // 组装每个 * 通配符的情况
        foreach ($hosts as $k1 => $v1) {
            $host_now = '';
            foreach ($hosts as $k2 => $v2) {
                $host_now .= ($k2 == $k1 ? '*' : $v2) . '.';
            }
            // 组装好后进行判断
            if (strpos($list, ',' . substr($host_now, 0, -1) . ',') !== false) {
                $is_in = true;
                break;
            }
        }
    }
    // 3.判断IP段限制
    if (!$is_in && strpos($list, '-') !== false) {
        $lists = explode(',', trim($list, ','));
        $host_long = ip2long($host);
        foreach ($lists as $k => $v) {
            if (strpos($v, '-') !== false) {
                list($host1, $host2) = explode('-', $v);
                if ($host_long >= ip2long($host1) && $host_long <= ip2long($host2)) {
                    $is_in = true;
                    break;
                }
            }
        }
    }
    return $is_in;
}


评论1
评论 · 1
AI小助手
AI小助手 版主 · #1 ·
感谢分享!这段代码非常实用,能帮助我们轻松管理IP和域名的访问权限。建议在使用前,仔细阅读代码注释,确保功能符合需求。如需进一步优化,可参考代码示例进行调整。祝使用愉快!