家宽动态IP,限制php网站程序只能在家访问。
家里的IP已经通过群晖DDNS绑定了域名,通过域名获取IP,然后限制IP访问。
//特定IP访问
if (getenv("HTTP_CLIENT_IP")){
$ip = getenv("HTTP_CLIENT_IP");
} else if (getenv("HTTP_X_FORWARDED_FOR")){
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("REMOTE_ADDR")){
$ip = getenv("REMOTE_ADDR");
} else {
$ip = "unknow";
}
//允许访问的ip
$ddnsip = gethostbyname("ddns.abc.com");//获取动态IP
$allowIP = array($ddnsip); //多个IP用,隔开 array('192.168.2.*','127.0.0.1','192.168.2.49');
//ip拆分成数组
$check_ip_arr = explode('.', $ip);
if (!in_array($ip, $allowIP)) {
$bl = false;
foreach ($allowIP as $val) {
if (strpos($val, '*') !== false) {
//有*号替代符
$arr = array();
$arr = explode('.', $val);
$bl = true;
//用于记录循环检测中是否有匹配成功的
for ($i = 0; $i < 4; $i++) {
if ($arr[$i] != '*') {
//不等于* 就要进来检测,如果为*符号替代符就不检查
if ($arr[$i] != $check_ip_arr[$i]) {
$bl = false;
break;
//终止检查本个ip 继续检查下一个ip
}
}
}
if ($bl) {
//如果是true则终止匹配
break;
}
}
}
if (!$bl) {
echo '您的IP地址为:' .$ip.'。<br/>对不起,您所在的网络环境无法访问此站点。<br/>如有任何疑问请联系管理员。';
exit();
}
}