迅睿CMS框架是一款PHP8高性能·简单易用的CMS开源开发框架,基于MIT开源许可协议发布,免费且不限制商业使用,是免费开源的产品,以万端互联为设计理念,支持的微信公众号、小程序、APP客户端、移动端网站、PC网站等多终端式管理系统。
我有个站是放在虚拟主机,没有宝塔管理面板在手里,如何实现禁止某一个省份的人访问前端?
<?php /** * 入口程序 * 开发者可在这里定义系统目录变量 */ // IP段转换为起始和结束整数的函数 function cidrToRange($cidr) { list($ip, $mask) = explode('/', $cidr); $ipInt = ip2long($ip); $maskInt = (0xFFFFFFFF << (32 - (int)$mask)) & 0xFFFFFFFF; $start = $ipInt & $maskInt; $end = $start + (~$maskInt & 0xFFFFFFFF); return ['start' => $start, 'end' => $end]; } // 屏蔽北京IP段并显示升级提示 function blockBeijingIPs() { // 获取访客IP $clientIP = $_SERVER['REMOTE_ADDR'] ?? ''; if(empty($clientIP)) return; // 白名单IP(带备注) $whiteList = [ '123.125.71.100' => '北京总部办公室', // 北京总部日常办公 '210.73.88.200' => '技术部测试IP', // 技术部测试专用 '114.247.50.50' => '高管专用IP' // 公司高管使用 ]; // 检查是否在白名单中 if (isset($whiteList[$clientIP])) { return; } // 将IP转换为整数便于比较 $ipInt = ip2long($clientIP); if($ipInt === false) return; // 北京主要IP段(涵盖电信、联通、移动等运营商) $beijingCIDRs = [ // 北京电信IP段 '1.180.0.0/13', // 北京电信 '117.136.0.0/14', // 北京电信 '220.180.0.0/14', // 北京电信 '221.192.0.0/12', // 北京电信 // 北京联通IP段 '202.96.0.0/16', // 北京联通 '203.86.0.0/16', // 北京联通 '61.135.0.0/16', // 北京联通 '114.247.0.0/16', // 北京联通 // 北京移动IP段 '111.13.0.0/16', // 北京移动 '123.125.0.0/16', // 北京移动 '210.73.0.0/16', // 北京移动 '223.71.0.0/16', // 北京移动 // 北京其他运营商IP段 '103.233.0.0/16', // 北京其他 '106.38.0.0/16', // 北京其他 '180.149.0.0/16', // 北京其他 '182.254.0.0/16' // 北京其他 ]; // 转换为起始和结束整数范围 $beijingIPRanges = []; foreach($beijingCIDRs as $cidr) { $beijingIPRanges[] = cidrToRange($cidr); } // 检查IP是否在北京IP段内 foreach($beijingIPRanges as $range) { if($ipInt >= $range['start'] && $ipInt <= $range['end']) { // 输出升级提示页面(带简单动画) echo '<!DOCTYPE html>'; echo '<html>'; echo '<head>'; echo '<meta charset="UTF-8">'; echo '<meta name="viewport" content="width=device-width, initial-scale=1.0">'; echo '<title>网站升级中</title>'; echo '<style>'; echo '* { box-sizing: border-box; margin: 0; padding: 0; }'; echo 'body { font-family: "Microsoft YaHei", sans-serif; background: #f5f7fa; min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 20px; }'; echo '.container { width: 100%; max-width: 600px; background: white; border-radius: 12px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); padding: 40px 20px; text-align: center; opacity: 0; transform: translateY(20px); animation: fadeIn 0.8s forwards 0.3s; }'; // 提示图标容器样式 echo '.icon-container { width: 100px; height: 100px; margin: 0 auto 30px; background: #e8f4fd; border-radius: 50%; display: flex; align-items: center; justify-content: center; position: relative; overflow: hidden; }'; echo '.icon-container::after { content: ""; position: absolute; width: 120%; height: 120%; background: rgba(255,255,255,0.2); transform: rotate(45deg) translate(-120%, -50%); animation: shine 2s infinite; }'; // 提示图标样式 echo '.icon-container svg { width: 50px; height: 50px; fill: #1677ff; }'; echo 'h1 { color: #1d2129; font-size: clamp(1.5rem, 5vw, 2.2rem); margin-bottom: 20px; position: relative; animation: slideUp 0.6s forwards 0.5s; opacity: 0; }'; echo 'p { color: #4e5969; font-size: clamp(1rem, 3vw, 1.1rem); line-height: 1.6; margin-bottom: 30px; animation: slideUp 0.6s forwards 0.7s; opacity: 0; }'; echo '.countdown { background: #f2f3f5; border-radius: 8px; padding: 25px 15px; margin: 20px 0 30px; font-size: clamp(1.2rem, 4vw, 1.6rem); color: #1677ff; font-weight: bold; animation: slideUp 0.6s forwards 0.9s; opacity: 0; }'; echo '.info { font-size: clamp(0.9rem, 2vw, 1rem); color: #86909c; margin-top: 25px; animation: slideUp 0.6s forwards 1.1s; opacity: 0; }'; echo '.dot-pulse { display: flex; justify-content: center; margin-top: 25px; gap: 8px; }'; echo '.dot { width: 10px; height: 10px; background: #1677ff; border-radius: 50%; animation: pulse 1.5s infinite; }'; echo '.dot:nth-child(2) { animation-delay: 0.3s; }'; echo '.dot:nth-child(3) { animation-delay: 0.6s; }'; // 动画定义 echo '@keyframes fadeIn { to { opacity: 1; transform: translateY(0); } }'; echo '@keyframes slideUp { to { opacity: 1; transform: translateY(0); } }'; echo '@keyframes shine { to { transform: rotate(45deg) translate(120%, -50%); } }'; echo '@keyframes pulse { 0%, 100% { transform: scale(0.8); opacity: 0.6; } 50% { transform: scale(1.2); opacity: 1; } }'; echo '@media (max-width: 480px) {'; echo ' .container { padding: 30px 15px; }'; echo ' .icon-container { width: 80px; height: 80px; }'; echo ' .icon-container svg { width: 40px; height: 40px; }'; echo '}'; echo '</style>'; echo '</head>'; echo '<body>'; echo '<div>'; // 提示图标 echo '<div>'; echo '<svg viewBox="0 0 1024 1024"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"/><path d="M512 288c-48.5 0-88 39.5-88 88v112c0 48.5 39.5 88 88 88s88-39.5 88-88V376c0-48.5-39.5-88-88-88zm0 160c-17.7 0-32-14.3-32-32V376c0-17.7 14.3-32 32-32s32 14.3 32 32v112c0 17.7-14.3 32-32 32z"/></svg>'; echo '</div>'; echo '<h1>网站系统升级中</h1>'; echo '<p>升级期间将暂停服务!</p>'; echo '<div>'; echo '预计完成时间: 7天 16小时'; echo '</div>'; echo '<p>升级完成后将恢复正常访问,感谢您的理解</p>'; echo '<div>'; echo '<div></div>'; echo '<div></div>'; echo '<div></div>'; echo '</div>'; echo '</div>'; echo '</body>'; echo '</html>'; exit; } } } // 执行IP检测 blockBeijingIPs(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////declare(strict_types=1); header('Content-Type: text/html; charset=utf-8'); //header('X-Frame-Options: SAMEORIGIN'); // 防止被站外加入iframe中浏览 // 是否是开发者模式(1开启、0关闭),上线之后建议关闭此开关 define('IS_DEV', 0); // 是否允许后台修改模板文件(1开启、0关闭),请不要长期开启此功能 define('IS_EDIT_TPL', 0); // 主网站目录,表示index.php文件的目录 define('ROOTPATH', dirname(__FILE__).'/'); // 当前站点目录 !defined('WEBPATH') && define('WEBPATH', dirname(__FILE__).'/'); // 缓存文件存储目录,支持自定义路径 define('WRITEPATH', ROOTPATH.'cache/'); // 系统核心程序目录,支持自定义路径和改名 define('FCPATH', dirname(__FILE__).'/dayrui/'); // 入口文件名称 !defined('SELF') && define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); // 后台管理标识 !defined('IS_ADMIN') && define('IS_ADMIN', FALSE); // ======开始,自动进入安装界面监测代码 if (!is_file(WRITEPATH.'install.lock') && !isset($_GET['c'])) { require WEBPATH.'install.php'; exit; } // 判断环境 if (version_compare(PHP_VERSION, '7.2.0') < 0) { echo "<font color=red>PHP版本必须在7.3以上,当前".PHP_VERSION."</font>";exit; } //=======结束,安装之后可以删除此段代码 // 执行主程序 require FCPATH.'Fcms/Init.php';
我自己写了一个,写入到index.php里面了,虽然不能屏蔽手机端,但是足够用了,误伤影响不大