禁止 一些地区的ip用户访问 网站
01 framework.php 中 获取请求的ip地址.保存为常量
define('IP', request::get_clientip());
02 setting表中.属于system模块,保存有ipbanned属性.对于的value是具体ip
cmstop.php 主程序执行前 _before_execute.读库配置,有禁止访问的ip时,遍历出所有ip,和当前请求的ip匹配. 提示禁止访问
$setting = setting('system');
if ($setting['ipbanned'])
{
$ipbanned = str_replace(array('*', '.'), array('[0-9]{1,3}', '\.'), $setting['ipbanned']);
$ipbanned = array_map('trim', explode("\n", $ipbanned));
foreach ($ipbanned as $ip)
{
if (preg_match("/^$ip$/", IP)) $this->showmessage("Access Denied");
}
}
==========获取请求用户的ip --获取环境方法.远程地址 getenv('REMOTE_ADDR');
function get_clientip()
{
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) //str case cmp 字符串 案例 cmp减法比较 相等返回0 其他小于0或大于0
{
$ip = getenv('HTTP_CLIENT_IP');
}
elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown'))
{
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown'))
{
$ip = getenv('REMOTE_ADDR');
}
elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown'))
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : 'unknown';
}