php禁止多个IP访问,如何实现通配符
下面是我的代码只能完整IP的禁止访问不能支持通配符<?php
$webip = "192.168.1.2|219.152.195.208|59.36.178.107";//禁止IP列表
$ip="192.168.1.1";//用户的IP
function IsNul($str){
if (!is_string($str)) return false; /*是否是字符串类型*/
if (empty($str)) return false; /*是否已设定*/
if ($str=='') return false; /*是否为空*/
return true;
}
function check_ip($arr_ip,$ip){
$allip = explode('|',$arr_ip);
if($allip){
foreach($allip as $key){
if(IsNul(strstr($ip,$key))){
exit("禁止访问");
}
}
}
}
check_ip($webip,$ip);
怎么实现通配符呢?
如果要禁止的IP列表如下怎么实现啊
$webip = "192.168.1.2|219.152.195.208|59.36.178.*|59.36.*.*";//禁止IP列表
还有大神吗?
还有日了百度,怎么SO结果都一样,一篇文章N个采集结果,找不到实用的 function check_ip($arr_ip, $ip) {
$allip = explode('|', $arr_ip);
if ($allip) {
foreach($allip as $key) {
$key = str_replace('.*', '', $key);
$key_len = strlen($key);
if (substr($ip, 0, $key_len) == $key) {
exit("禁止访问");
}
}
}
}
能实现需求但不考虑性能影响的一种垃圾写法 Mr·√ 发表于 2022-10-24 17:22
能实现需求但不考虑性能影响的一种垃圾写法
有没有更好的写法吖:lol: 肯定去 nginx 上操作啊 娃哈哈 发表于 2022-10-24 17:51
肯定去 nginx 上操作啊
使用场景不方便在nginx上操作,使用在部份页面上,禁访有时限:cool:
$webip = "192.168.1.2|219.152.195.208|59.36.178.107";//禁止IP列表
$ip="192.168.1.1";//用户的IP
function check_ip($arr_ip, $ip) {
$regexp= '#^('.str_replace(['.','*'],['\.','*']$arr_ip).')$#';
return preg_match($regexp,$ip);
} 漆黑风景 发表于 2022-10-24 18:31
$webip = "192.168.1.2|219.152.195.208|59.36.178.107";//禁止IP列表
$ip="192.168.1.1";//用户的IP
f ...
差点卡死,这个是?
<?php
$ip = '192.168.1.122';
$deny_ips = '127.0.0.2, 192.168.1.*';
function check_ip($src_ip) {
global $deny_ips;
$plist = explode(',', $deny_ips);
foreach($plist as $val) {
$val = trim($val);
$val = str_replace('*', '+', $val);
$m = '^'.$val.'$';
if(preg_match("/$m/", $src_ip)) {
return true;
}
}
return false;
}
var_dump(check_ip($ip));
本帖最后由 凌弘 于 2022-10-25 00:54 编辑
iis和nginx直接用规则不是更快?百度一下很多现成的
真佩服你们这些牛逼的码农,明明ctrl+c能解决非要自己牛逼轰轰的自己写一段。。。
页:
[1]