迅睿開源框架是一款PHP8高性能·簡單易用的PHP開源開發(fā)框架, 基于MIT開源許可協(xié)議發(fā)布,不限制商業(yè)使用,以多端互聯(lián)為設(shè)計理念, 支持的微信公眾號、小程序、APP客戶端、移動端網(wǎng)站、PC網(wǎng)站等多終端式管理系統(tǒng)。
業(yè)務(wù)經(jīng)理
微信掃描以上二維碼
028-61286886
技術(shù)咨詢
我有個站是放在虛擬主機,沒有寶塔管理面板在手里,如何實現(xiàn)禁止某一個省份的人訪問前端?
開源是一種精神,但不是義務(wù),幫忙是情分,不幫也不要抱怨,建議大家多研究代碼、多閱讀代碼、多翻閱社區(qū)歷史問題!
回復@迅睿官方技術(shù)專家 我自己寫了一個,寫入到index.php里面了,雖然不能屏蔽手機端,但是足夠用了,誤傷影響不大
<?php /** * 入口程序 * 開發(fā)者可在這里定義系統(tǒng)目錄變量 */ // IP段轉(zhuǎn)換為起始和結(jié)束整數(shù)的函數(shù) 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' => '技術(shù)部測試IP', // 技術(shù)部測試專用 '114.247.50.50' => '高管專用IP' // 公司高管使用 ]; // 檢查是否在白名單中 if (isset($whiteList[$clientIP])) { return; } // 將IP轉(zhuǎn)換為整數(shù)便于比較 $ipInt = ip2long($clientIP); if($ipInt === false) return; // 北京主要IP段(涵蓋電信、聯(lián)通、移動等運營商) $beijingCIDRs = [ // 北京電信IP段 '1.180.0.0/13', // 北京電信 '117.136.0.0/14', // 北京電信 '220.180.0.0/14', // 北京電信 '221.192.0.0/12', // 北京電信 // 北京聯(lián)通IP段 '202.96.0.0/16', // 北京聯(lián)通 '203.86.0.0/16', // 北京聯(lián)通 '61.135.0.0/16', // 北京聯(lián)通 '114.247.0.0/16', // 北京聯(lián)通 // 北京移動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' // 北京其他 ]; // 轉(zhuǎn)換為起始和結(jié)束整數(shù)范圍 $beijingIPRanges = []; foreach($beijingCIDRs as $cidr) { $beijingIPRanges[] = cidrToRange($cidr); } // 檢查IP是否在北京IP段內(nèi) 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>網(wǎng)站升級中</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>網(wǎng)站系統(tǒng)升級中</h1>'; echo '<p>升級期間將暫停服務(wù)!</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; } } } // 執(zhí)行IP檢測 blockBeijingIPs(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////declare(strict_types=1); header('Content-Type: text/html; charset=utf-8'); //header('X-Frame-Options: SAMEORIGIN'); // 防止被站外加入iframe中瀏覽 // 是否是開發(fā)者模式(1開啟、0關(guān)閉),上線之后建議關(guān)閉此開關(guān) define('IS_DEV', 0); // 是否允許后臺修改模板文件(1開啟、0關(guān)閉),請不要長期開啟此功能 define('IS_EDIT_TPL', 0); // 主網(wǎng)站目錄,表示index.php文件的目錄 define('ROOTPATH', dirname(__FILE__).'/'); // 當前站點目錄 !defined('WEBPATH') && define('WEBPATH', dirname(__FILE__).'/'); // 緩存文件存儲目錄,支持自定義路徑 define('WRITEPATH', ROOTPATH.'cache/'); // 系統(tǒng)核心程序目錄,支持自定義路徑和改名 define('FCPATH', dirname(__FILE__).'/dayrui/'); // 入口文件名稱 !defined('SELF') && define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); // 后臺管理標識 !defined('IS_ADMIN') && define('IS_ADMIN', FALSE); // ======開始,自動進入安裝界面監(jiān)測代碼 if (!is_file(WRITEPATH.'install.lock') && !isset($_GET['c'])) { require WEBPATH.'install.php'; exit; } // 判斷環(huán)境 if (version_compare(PHP_VERSION, '7.2.0') < 0) { echo "<font color=red>PHP版本必須在7.3以上,當前".PHP_VERSION."</font>";exit; } //=======結(jié)束,安裝之后可以刪除此段代碼 // 執(zhí)行主程序 require FCPATH.'Fcms/Init.php';
開源是一種精神,但不是義務(wù),幫忙是情分,不幫也不要抱怨,建議大家多研究代碼、多閱讀代碼、多翻閱社區(qū)歷史問題!
回復@迅睿官方技術(shù)專家
我自己寫了一個,寫入到index.php里面了,雖然不能屏蔽手機端,但是足夠用了,誤傷影響不大
<?php /** * 入口程序 * 開發(fā)者可在這里定義系統(tǒng)目錄變量 */ // IP段轉(zhuǎn)換為起始和結(jié)束整數(shù)的函數(shù) 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' => '技術(shù)部測試IP', // 技術(shù)部測試專用 '114.247.50.50' => '高管專用IP' // 公司高管使用 ]; // 檢查是否在白名單中 if (isset($whiteList[$clientIP])) { return; } // 將IP轉(zhuǎn)換為整數(shù)便于比較 $ipInt = ip2long($clientIP); if($ipInt === false) return; // 北京主要IP段(涵蓋電信、聯(lián)通、移動等運營商) $beijingCIDRs = [ // 北京電信IP段 '1.180.0.0/13', // 北京電信 '117.136.0.0/14', // 北京電信 '220.180.0.0/14', // 北京電信 '221.192.0.0/12', // 北京電信 // 北京聯(lián)通IP段 '202.96.0.0/16', // 北京聯(lián)通 '203.86.0.0/16', // 北京聯(lián)通 '61.135.0.0/16', // 北京聯(lián)通 '114.247.0.0/16', // 北京聯(lián)通 // 北京移動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' // 北京其他 ]; // 轉(zhuǎn)換為起始和結(jié)束整數(shù)范圍 $beijingIPRanges = []; foreach($beijingCIDRs as $cidr) { $beijingIPRanges[] = cidrToRange($cidr); } // 檢查IP是否在北京IP段內(nèi) 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>網(wǎng)站升級中</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>網(wǎng)站系統(tǒng)升級中</h1>'; echo '<p>升級期間將暫停服務(wù)!</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; } } } // 執(zhí)行IP檢測 blockBeijingIPs(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////declare(strict_types=1); header('Content-Type: text/html; charset=utf-8'); //header('X-Frame-Options: SAMEORIGIN'); // 防止被站外加入iframe中瀏覽 // 是否是開發(fā)者模式(1開啟、0關(guān)閉),上線之后建議關(guān)閉此開關(guān) define('IS_DEV', 0); // 是否允許后臺修改模板文件(1開啟、0關(guān)閉),請不要長期開啟此功能 define('IS_EDIT_TPL', 0); // 主網(wǎng)站目錄,表示index.php文件的目錄 define('ROOTPATH', dirname(__FILE__).'/'); // 當前站點目錄 !defined('WEBPATH') && define('WEBPATH', dirname(__FILE__).'/'); // 緩存文件存儲目錄,支持自定義路徑 define('WRITEPATH', ROOTPATH.'cache/'); // 系統(tǒng)核心程序目錄,支持自定義路徑和改名 define('FCPATH', dirname(__FILE__).'/dayrui/'); // 入口文件名稱 !defined('SELF') && define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); // 后臺管理標識 !defined('IS_ADMIN') && define('IS_ADMIN', FALSE); // ======開始,自動進入安裝界面監(jiān)測代碼 if (!is_file(WRITEPATH.'install.lock') && !isset($_GET['c'])) { require WEBPATH.'install.php'; exit; } // 判斷環(huán)境 if (version_compare(PHP_VERSION, '7.2.0') < 0) { echo "<font color=red>PHP版本必須在7.3以上,當前".PHP_VERSION."</font>";exit; } //=======結(jié)束,安裝之后可以刪除此段代碼 // 執(zhí)行主程序 require FCPATH.'Fcms/Init.php';