我正在开发一个IP限制插件,但有一个奇怪的问题。
我在设置页面中有一个文本区域,其中输入了应该允许的每个IP地址,每行一个。然后我将IP解析为如下数组:
$ips = trim($cmm_options[\'ips\']);
$ips = array_filter(explode("\\n", $ips), \'trim\');
这将生成如下所示的数组:Array
(
[0] => 67.6.134.102
[1] => 97.118.69.236
)
加载页面时,将根据此数组检查访问者IP地址,如下所示:function cmm_ip_test($ips){
//testing that correct IP address used
for($i = 0, $cnt = count($ips); $i<$cnt; $i++) {
$ipregex = preg_replace(\'/\\./\', \'\\.\', $ips[$i]);
$ipregex = preg_replace(\'/\\*/\', \'.*\', $ipregex);
if(preg_match(\'/\'.$ipregex.\'/\', $_SERVER[\'REMOTE_ADDR\'])){
// apply filter
return true;
}
//do not apply filter
}
return false;
}
除了阵列中的第一个IP之外,所有这些都工作得非常好。例如,假设我的IP是67.6.134.102,它是在textarea中输入的第一个(因此也是数组中的第一个),像这样cmm\\u IP\\u test()函数将返回false。如果随后将IP移动到textarea的第二行(或除第一行以外的任何其他行)并加载页面,cmm\\u IP\\u test()将返回true。据我所知,数组的第一个索引和任何过去的索引之间绝对没有区别。
你知道为什么第一个索引位置即使是有效的数组也无法验证吗?
谢谢