当前位置:首页>python>Python+Ai实现番茄小说编写发版

Python+Ai实现番茄小说编写发版

  • 2026-03-20 22:37:51
Python+Ai实现番茄小说编写发版

基于tkinter的GUI工具,实现对指定文件夹下所有markdown文件的批量处理,核心功能包括:选择文件夹、批量查找内容、批量替换内容、展示查找结果、替换后按时间戳重命名并保存新文件(比如将所有文件中的aaa替换为bbb)。

程序验证

生成目录

程序替换验证

程序验证实际效果

程序验证小说发版

编写一个完整、可直接运行的tkinter程序,整合所有你提到的功能,界面友好且操作流程清晰。

在线发版小说验证

https://changdunovel.com/ug/pages/short-story-share?post_id=7611909021624472345&post_type=13&service_id=0&forum_book_id=0&share_code=G0VuqmlVm8JzlsoCfInRUn7w99s8_uLB5Mw0Ltsg-AE%3D&forum_id=0&forum_share_code=bf3ZWHYkWfxqQc7H2m8HMohglo12P9wWjzRp5j2CnhU%3D&relative_type=0&aid=1967&update_version_code=70932&percent=30&use_open_launch_app=1&user_id=94375796e7dca0fee8ec7e9a5a1acb55&did=e766a7e228d16a8b50e06f7c70181d3f&entrance=story_share_button&zlink=https%3A%2F%2Fzlink.fqnovel.com%2FdhVGe&gd_label=click_schema_lhft_share_novelapp_android&source_channel=wechat&share_channel=wechat&share_timestamp=1772290573&report_params=%7B%22entrance%22%3A%22story_share_button%22%2C%22type%22%3A%22story%22%2C%22content_type%22%3A%22story%22%2C%22content_id%22%3A%227611908638269000766%22%2C%22content_id_key%22%3A%22book_id%22%2C%22share_timestamp%22%3A%221772290573%22%7D&share_token=6fa167ac-5d3c-43fc-9a37-0e8e915518f5

完整实现代码--部分代码

import tkinter as tkfrom tkinter import ttk, filedialog, messageboximport osimport refrom datetime import datetimeclassMarkdownBatchProcessor:def__init__(self, root):        self.root = root        self.root.title("Markdown批量处理工具")        self.root.geometry("900x600")# 初始化变量        self.folder_path = tk.StringVar()  # 选中的文件夹路径        self.search_text = tk.StringVar()  # 要查找的文本        self.replace_text = tk.StringVar()  # 要替换的文本        self.search_results = []  # 存储查找结果# 创建UI界面        self._create_widgets()def_create_widgets(self):"""创建所有UI组件"""# 1. 文件夹选择区域        frame_folder = ttk.LabelFrame(self.root, text="文件夹选择")        frame_folder.pack(fill="x", padx=10, pady=5)        ttk.Label(frame_folder, text="目标文件夹:").grid(row=0, column=0, padx=5, pady=5, sticky="w")        ttk.Entry(frame_folder, textvariable=self.folder_path, width=80).grid(row=0, column=1, padx=5, pady=5)        ttk.Button(frame_folder, text="选择文件夹", command=self._select_folder).grid(row=0, column=2, padx=5, pady=5)# 2. 查找替换区域        frame_search_replace = ttk.LabelFrame(self.root, text="查找替换设置")        frame_search_replace.pack(fill="x", padx=10, pady=5)# 查找行        ttk.Label(frame_search_replace, text="查找内容:").grid(row=0, column=0, padx=5, pady=5, sticky="w")        ttk.Entry(frame_search_replace, textvariable=self.search_text, width=50).grid(row=0, column=1, padx=5, pady=5)        ttk.Button(frame_search_replace, text="批量查找", command=self._batch_search).grid(row=0, column=2, padx=5, pady=5)# 替换行        ttk.Label(frame_search_replace, text="替换为:").grid(row=1, column=0, padx=5, pady=5, sticky="w")        ttk.Entry(frame_search_replace, textvariable=self.replace_text, width=50).grid(row=1, column=1, padx=5, pady=5)        ttk.Button(frame_search_replace, text="批量替换并保存", command=self._batch_replace, bg="#4CAF50", fg="white").grid(row=1, column=2, padx=5, pady=5)# 3. 结果展示区域        frame_result = ttk.LabelFrame(self.root, text="查找结果")        frame_result.pack(fill="both", expand=True, padx=10, pady=5)# 创建表格        columns = ("文件名""匹配次数""匹配位置预览")        self.tree = ttk.Treeview(frame_result, columns=columns, show="headings")# 设置列标题for col in columns:            self.tree.heading(col, text=col)# 设置列宽        self.tree.column("文件名", width=200)        self.tree.column("匹配次数", width=100)        self.tree.column("匹配位置预览", width=500)# 滚动条        scrollbar = ttk.Scrollbar(frame_result, orient="vertical", command=self.tree.yview)        self.tree.configure(yscrollcommand=scrollbar.set)        self.tree.pack(side="left", fill="both", expand=True)        scrollbar.pack(side="right", fill="y")def_select_folder(self):"""选择目标文件夹"""        folder = filedialog.askdirectory(title="选择包含markdown文件的文件夹")if folder:            self.folder_path.set(folder)# 清空之前的结果            self._clear_tree()def_get_md_files(self):"""获取文件夹下所有markdown文件"""        folder = self.folder_path.get()ifnot os.path.exists(folder):            messagebox.showerror("错误""文件夹路径不存在!")return []        md_files = []for file in os.listdir(folder):if file.lower().endswith(".md"):                md_files.append(os.path.join(folder, file))return md_filesdef_clear_tree(self):"""清空结果表格"""for item in self.tree.get_children():            self.tree.delete(item)        self.search_results = []def_batch_search(self):"""批量查找所有markdown文件中的指定内容"""# 清空之前的结果        self._clear_tree()# 验证输入        search_text = self.search_text.get().strip()ifnot search_text:            messagebox.showwarning("警告""请输入要查找的内容!")return# 获取所有md文件        md_files = self._get_md_files()ifnot md_files:            messagebox.showinfo("提示""未找到任何markdown文件!")return# 遍历文件查找for file_path in md_files:try:with open(file_path, "r", encoding="utf-8"as f:                    content = f.read()# 查找所有匹配位置                matches = list(re.finditer(re.escape(search_text), content))                match_count = len(matches)# 生成预览信息                preview = ""if match_count > 0:# 取第一个匹配的前后20个字符作为预览                    first_match = matches[0]                    start = max(0, first_match.start() - 20)                    end = min(len(content), first_match.end() + 20)                    preview = content[start:end].replace("\n"" ")                    preview = f"...{preview}..."# 保存结果                file_name = os.path.basename(file_path)                self.search_results.append((file_name, match_count, preview))# 插入表格                self.tree.insert("""end", values=(file_name, match_count, preview))except Exception as e:                messagebox.showerror("错误"f"读取文件 {os.path.basename(file_path)} 失败:{str(e)}")        messagebox.showinfo("完成"f"查找完成!共处理 {len(md_files)} 个文件,找到匹配项的文件有 {len(self.search_results)} 个")def_batch_replace(self):"""批量替换并保存新文件"""# 验证输入        search_text = self.search_text.get().strip()        replace_text = self.replace_text.get().strip()ifnot search_text:            messagebox.showwarning("警告""请输入要查找的内容!")return# 获取所有md文件        md_files = self._get_md_files()ifnot md_files:            messagebox.showinfo("提示""未找到任何markdown文件!")return# 确认替换ifnot messagebox.askyesno("确认"f"即将替换 {len(md_files)} 个文件中的 '{search_text}' 为 '{replace_text}',并生成新文件。是否继续?"):return# 生成时间戳        timestamp = datetime.now().strftime("%Y%m%d%H%M%S")        success_count = 0# 遍历文件替换for file_path in md_files:try:# 读取原文件with open(file_path, "r", encoding="utf-8"as f:                    content = f.read()# 替换内容                new_content = content.replace(search_text, replace_text)# 生成新文件名:原文件名_时间戳.md                file_dir = os.path.dirname(file_path)                file_name = os.path.basename(file_path)                name_without_ext = os.path.splitext(file_name)[0]                new_file_name = f"{name_without_ext}_{timestamp}.md"                new_file_path = os.path.join(file_dir, new_file_name)# 保存新文件with open(new_file_path, "w", encoding="utf-8"as f:                    f.write(new_content)                success_count += 1except Exception as e:                messagebox.showerror("错误"f"处理文件 {os.path.basename(file_path)} 失败:{str(e)}")        messagebox.showinfo("完成"f"替换完成!共处理 {len(md_files)} 个文件,成功生成 {success_count} 个新文件。\n时间戳:{timestamp}")# 替换后重新查找(展示替换结果)        self._batch_search()if __name__ == "__main__":    root = tk.Tk()    app = MarkdownBatchProcessor(root)    root.mainloop()

代码功能解释

  1. 界面布局

    • 分为三个核心区域:文件夹选择区、查找替换设置区、结果展示区
    • 使用ttk.LabelFrame分组,Treeview表格展示查找结果,界面清晰易操作
  2. 核心功能实现

    • 验证输入后,遍历文件替换指定内容(使用str.replace实现全局替换)
    • 生成带年月日时分秒时间戳的新文件名(如test_20260228153020.md
    • 保存新文件到原文件夹,替换完成后自动重新查找展示结果
    • 遍历文件夹下所有.md文件
    • 读取文件内容,使用re.finditer查找所有匹配项
    • 统计匹配次数,生成匹配位置预览,展示在表格中
    • 选择文件夹:通过filedialog.askdirectory获取文件夹路径,自动过滤非markdown文件
    • 批量查找
    • 批量替换
  3. 异常处理

    • 处理文件读取/写入失败的情况,弹出错误提示
    • 验证文件夹路径、查找内容等输入的合法性

使用说明

  1. 环境要求:只需Python环境(自带tkinter,无需额外安装依赖)
  2. 操作步骤
    • 点击「选择文件夹」按钮,选择包含markdown文件的文件夹
    • 在「查找内容」输入框中输入要查找的字段(比如aaa
    • 点击「批量查找」,查看表格中的匹配结果
    • 在「替换为」输入框中输入替换后的内容(比如bbb
    • 点击「批量替换并保存」,确认后生成带时间戳的新文件
  3. 示例
    • 查找内容:aaa
    • 替换为:bbb
    • 原文件:note.md
    • 新文件:note_20260228153020.md(文件内所有aaa都被替换为bbb

总结

  1. 该工具实现了文件夹选择、批量查找、批量替换、结果表格展示、时间戳重命名保存等核心功能,完全满足你的需求
  2. 操作流程直观,支持中文路径和内容,具备完善的异常处理
  3. 替换后的文件不会覆盖原文件,而是生成带时间戳的新文件,保证原文件安全

前的代码虽然实现了替换和时间戳保存,但没有按照「年月日时分秒+替换aaa为bbb」的格式来命名新文件(比如 20260228153020_替换aaa为bbb_原文件名.md),而是仅在原文件名后加了时间戳。我会修正这个问题,让新文件名严格符合你要求的格式,同时确保每个文档中的指定字段被全部替换

修正后的完整代码

import tkinter as tkfrom tkinter import ttk, filedialog, messageboximport osimport refrom datetime import datetimeclassMarkdownBatchProcessor:def__init__(self, root):        self.root = root        self.root.title("Markdown批量处理工具")        self.root.geometry("900x600")# 初始化变量        self.folder_path = tk.StringVar()  # 选中的文件夹路径        self.search_text = tk.StringVar()  # 要查找的文本(如aaa)        self.replace_text = tk.StringVar()  # 要替换的文本(如bbb)        self.search_results = []  # 存储查找结果# 创建UI界面        self._create_widgets()def_create_widgets(self):"""创建所有UI组件"""# 1. 文件夹选择区域        frame_folder = ttk.LabelFrame(self.root, text="文件夹选择")        frame_folder.pack(fill="x", padx=10, pady=5)        ttk.Label(frame_folder, text="目标文件夹:").grid(row=0, column=0, padx=5, pady=5, sticky="w")        ttk.Entry(frame_folder, textvariable=self.folder_path, width=80).grid(row=0, column=1, padx=5, pady=5)        ttk.Button(frame_folder, text="选择文件夹", command=self._select_folder).grid(row=0, column=2, padx=5, pady=5)# 2. 查找替换区域        frame_search_replace = ttk.LabelFrame(self.root, text="查找替换设置")        frame_search_replace.pack(fill="x", padx=10, pady=5)# 查找行        ttk.Label(frame_search_replace, text="查找内容:").grid(row=0, column=0, padx=5, pady=5, sticky="w")        ttk.Entry(frame_search_replace, textvariable=self.search_text, width=50).grid(row=0, column=1, padx=5, pady=5)        ttk.Button(frame_search_replace, text="批量查找", command=self._batch_search).grid(row=0, column=2, padx=5, pady=5)# 替换行        ttk.Label(frame_search_replace, text="替换为:").grid(row=1, column=0, padx=5, pady=5, sticky="w")        ttk.Entry(frame_search_replace, textvariable=self.replace_text, width=50).grid(row=1, column=1, padx=5, pady=5)        ttk.Button(frame_search_replace, text="批量替换并保存", command=self._batch_replace, bg="#4CAF50", fg="white").grid(row=1, column=2, padx=5, pady=5)# 3. 结果展示区域        frame_result = ttk.LabelFrame(self.root, text="查找结果")        frame_result.pack(fill="both", expand=True, padx=10, pady=5)# 创建表格        columns = ("文件名""匹配次数""匹配位置预览")        self.tree = ttk.Treeview(frame_result, columns=columns, show="headings")# 设置列标题for col in columns:            self.tree.heading(col, text=col)# 设置列宽        self.tree.column("文件名", width=200)        self.tree.column("匹配次数", width=100)        self.tree.column("匹配位置预览", width=500)# 滚动条        scrollbar = ttk.Scrollbar(frame_result, orient="vertical", command=self.tree.yview)        self.tree.configure(yscrollcommand=scrollbar.set)        self.tree.pack(side="left", fill="both", expand=True)        scrollbar.pack(side="right", fill="y")def_select_folder(self):"""选择目标文件夹"""        folder = filedialog.askdirectory(title="选择包含markdown文件的文件夹")if folder:            self.folder_path.set(folder)# 清空之前的结果            self._clear_tree()def_get_md_files(self):"""获取文件夹下所有markdown文件"""        folder = self.folder_path.get()ifnot os.path.exists(folder):            messagebox.showerror("错误""文件夹路径不存在!")return []        md_files = []for file in os.listdir(folder):if file.lower().endswith(".md"):                md_files.append(os.path.join(folder, file))return md_filesdef_clear_tree(self):"""清空结果表格"""for item in self.tree.get_children():            self.tree.delete(item)        self.search_results = []def_batch_search(self):"""批量查找所有markdown文件中的指定内容"""# 清空之前的结果        self._clear_tree()# 验证输入        search_text = self.search_text.get().strip()ifnot search_text:            messagebox.showwarning("警告""请输入要查找的内容!")return# 获取所有md文件        md_files = self._get_md_files()ifnot md_files:            messagebox.showinfo("提示""未找到任何markdown文件!")return# 遍历文件查找for file_path in md_files:try:with open(file_path, "r", encoding="utf-8"as f:                    content = f.read()# 查找所有匹配位置(全局匹配)                matches = list(re.finditer(re.escape(search_text), content))                match_count = len(matches)# 生成预览信息                preview = ""if match_count > 0:# 取第一个匹配的前后20个字符作为预览                    first_match = matches[0]                    start = max(0, first_match.start() - 20)                    end = min(len(content), first_match.end() + 20)                    preview = content[start:end].replace("\n"" ")                    preview = f"...{preview}..."# 保存结果                file_name = os.path.basename(file_path)                self.search_results.append((file_name, match_count, preview))# 插入表格                self.tree.insert("""end", values=(file_name, match_count, preview))except Exception as e:                messagebox.showerror("错误"f"读取文件 {os.path.basename(file_path)} 失败:{str(e)}")        messagebox.showinfo("完成"f"查找完成!共处理 {len(md_files)} 个文件,找到匹配项的文件有 {len(self.search_results)} 个")def_batch_replace(self):"""批量替换所有文档的指定字段,并按指定格式保存新文件"""# 验证输入        search_text = self.search_text.get().strip()        replace_text = self.replace_text.get().strip()ifnot search_text:            messagebox.showwarning("警告""请输入要查找的内容!")return# 获取所有md文件        md_files = self._get_md_files()ifnot md_files:            messagebox.showinfo("提示""未找到任何markdown文件!")return# 确认替换        confirm_msg = f"即将替换 {len(md_files)} 个文件中的 '{search_text}' 为 '{replace_text}',并按「年月日时分秒_替换xxx为xxx_原文件名.md」格式生成新文件。是否继续?"ifnot messagebox.askyesno("确认", confirm_msg):return# 生成时间戳(年月日时分秒)        timestamp = datetime.now().strftime("%Y%m%d%H%M%S")# 生成替换描述(如:替换aaa为bbb)        replace_desc = f"替换{search_text}{replace_text}"        success_count = 0# 遍历文件执行全局替换for file_path in md_files:try:# 读取原文件内容(确保UTF-8编码,兼容中文)with open(file_path, "r", encoding="utf-8"as f:                    content = f.read()# 全局替换:替换所有匹配的字段(str.replace默认全局替换)                new_content = content.replace(search_text, replace_text)# 生成新文件名:时间戳_替换描述_原文件名.md                file_dir = os.path.dirname(file_path)                original_file_name = os.path.basename(file_path)                new_file_name = f"{timestamp}_{replace_desc}_{original_file_name}"                new_file_path = os.path.join(file_dir, new_file_name)# 保存新文件(覆盖保护:如果同名文件已存在,自动加序号)                counter = 1while os.path.exists(new_file_path):                    new_file_name = f"{timestamp}_{replace_desc}_{counter}_{original_file_name}"                    new_file_path = os.path.join(file_dir, new_file_name)                    counter += 1# 写入新内容with open(new_file_path, "w", encoding="utf-8"as f:                    f.write(new_content)                success_count += 1except Exception as e:                messagebox.showerror("错误"f"处理文件 {os.path.basename(file_path)} 失败:{str(e)}")# 提示结果        result_msg = f"替换完成!\n共处理 {len(md_files)} 个文件,成功生成 {success_count} 个新文件。\n示例文件名:{timestamp}_{replace_desc}_原文件名.md"        messagebox.showinfo("完成", result_msg)# 替换后重新查找,验证替换结果        self._batch_search()if __name__ == "__main__":    root = tk.Tk()    app = MarkdownBatchProcessor(root)    root.mainloop()

核心修正点说明

  1. 新文件名格式严格符合要求

    • 原错误格式:note_20260228153020.md
    • 修正后格式:20260228153020_替换aaa为bbb_note.md(完全匹配「年月日时分秒+替换aaa为bbb+原文件名」)
    • 关键代码:
      timestamp = datetime.now().strftime("%Y%m%d%H%M%S")  # 年月日时分秒replace_desc = f"替换{search_text}{replace_text}"# 替换描述new_file_name = f"{timestamp}_{replace_desc}_{original_file_name}"# 组合新文件名
  2. 确保全局替换所有字段

    • 使用 content.replace(search_text, replace_text):Python的str.replace方法默认会替换字符串中所有匹配的子串,而非仅第一个,确保每个文档中的目标字段被全部替换(比如所有aaa都变成bbb)。
    • 增加了重复文件名保护:如果生成的新文件名已存在,会自动加序号(如20260228153020_替换aaa为bbb_1_note.md),避免文件覆盖。
  3. 更清晰的用户提示

    • 替换确认弹窗明确说明文件名格式,替换完成后提示示例文件名,让你直观知道生成的文件命名规则。

测试示例

假设你操作如下:

  • 查找内容:aaa
  • 替换为:bbb
  • 原文件:学习笔记.md
  • 生成的新文件:20260228164530_替换aaa为bbb_学习笔记.md
  • 文件内容:原文件中所有的aaa都被替换成bbb,原文件保持不变。

总结

  1. 修正后的代码严格按照「年月日时分秒_替换xxx为xxx_原文件名.md」格式生成新文件,完全匹配你的需求。
  2. 确保每个markdown文件中的目标字段被全局替换(所有匹配项都替换),且原文件不会被覆盖。
  3. 增加了重复文件名保护机制,避免因多次替换导致文件覆盖的问题。 

部分小说验证片段

# 第1集:楔子·神王陨落

诛仙渊底,罡风如刀,刮过崖壁上的嶙峋怪石,发出鬼哭狼嚎般的嘶吼,卷着刺骨的寒意,吞噬着周遭仅剩的一丝生机。渊顶云雾翻涌,遮蔽了日月,仅有的微光艰难地穿透云层,落在崖边那道摇摇欲坠的身影上,将其染成一片血色。

杨少平半跪在地,胸口一道深可见骨的伤口狰狞可怖,断裂的肋骨刺破皮肉,暗红的神血顺着伤口汩汩涌出,滴落在脚下的碎石上,发出“滋滋”的声响,瞬间将坚硬的岩石腐蚀出细小的坑洞。他那身曾经威震三界的神王战甲,早已破碎不堪,甲片散落一地,沾满了血污与尘埃,唯有战甲领口处那枚镌刻着青云纹路的玉佩,还在微弱地散发着淡青色的光晕,那是青云宗的宗主信物,也是他一生守护的象征。

他的气息微弱得如同风中残烛,每一次呼吸都牵扯着胸口的剧痛,嘴角不断溢出鲜血,视线也开始变得模糊。但那双曾经澄澈如星辰、盛满威严与温柔的眼眸,此刻却燃烧着滔天的恨意与不甘,死死地盯着崖顶那道挺拔却阴狠的身影。

黄琛就站在诛仙渊的崖边,一身月白色的青云宗大师兄服饰纤尘不染,与这血色弥漫的场景格格不入。他面容俊朗,眉眼间却带着一丝难以掩饰的得意与贪婪,手中紧紧攥着一柄通体漆黑、泛着诡异光泽的长剑,剑身上还残留着杨少平的神血,顺着剑刃缓缓滴落,坠入深渊。

那是杨少平的佩剑,破妄神剑。

“为什么……”杨少平的声音嘶哑得如同破旧的风箱,每一个字都带着血沫,却依旧带着不容置疑的质问。他想不通,自己倾囊相授、视若手足的大师兄,自己甘愿托付宗门重任、分享权力的挚友,为何会在自己冲击至高神境的关键时刻,给予自己致命一击。

黄琛闻言,嘴角勾起一抹冰冷的嗤笑,缓缓抬起头,目光俯视着崖底的杨少平,眼神里没有半分昔日的恭敬与亲近,只剩下赤裸裸的野心与厌恶。“为什么?”他重复了一遍,语气中满是嘲讽,“杨少平,你太天真了。你以为我真的甘愿屈居你之下,做你身边的陪衬吗?”

他向前迈了一步,居高临下地看着杨少平,声音里的贪婪愈发明显:“你是青云宗万年不遇的奇才,天生拥有神王之姿,一手破妄神剑法威震三界,宗门上下都对你俯首帖耳,连宗主之位都早早地传给了你。可你呢?你只顾着修炼,只顾着守护那些所谓的宗门道义,根本看不到我的野心,也看不到我为青云宗付出的一切!”

“我追随你多年,为你出生入死,为青云宗南征北战,立下无数汗马功劳。可所有人都只记得你杨少平,记得你是那个拯救青云宗的神王,谁还记得我黄琛?”黄琛的声音逐渐提高,语气中满是怨毒,“还有混沌剑胎,那是上古神物,本就该属于有能力的人。你空有神王之姿,却不懂如何最大化利用剑胎的力量,与其让它在你手中浪费,不如交给我,我会用它带领青云宗走向更高的巅峰,甚至统治整个三界!”

混沌剑胎。

这四个字如同利刃,再次刺穿了杨少平的心脏。那是他耗费百年光阴,从上古秘境中寻得的神物,蕴含着无尽的神王本源,是他冲击至高神境的关键,也是他计划中守护青云宗、守护三界的最大依仗。他从未想过,黄琛竟然早已觊觎这混沌剑胎,甚至为此策划了这场惊天背叛。

“所以,宗门里的内奸,是你安排的?”杨少平的心脏像是被一只无形的手紧紧攥住,剧痛难忍。他想起了近期宗门内频繁出现的异动,想起了那些忠于自己的弟子莫名失踪,想起了自己冲击神境时,那些突如其来的干扰——原来这一切,都是黄琛的阴谋。

“是又如何?”黄琛毫不掩饰,脸上露出得意的笑容,“没有那些内奸,我怎么能在你冲击神境、最虚弱的时候,给你这致命一击?怎么能顺利地夺走破妄神剑,怎么能让整个青云宗都以为,你是修炼走火入魔,坠渊而亡?”

他顿了顿,又补充道:“哦对了,还有师父和师母,他们不肯接受我成为新的宗主,不肯承认你的‘罪行’,我只能……送他们去见你了。”

“你说什么?!”杨少平浑身一震,一股极致的愤怒瞬间冲破了身体的剧痛,他猛地想要站起身,却牵动了胸口的伤口,一口鲜血喷涌而出,身体再次重重地摔倒在地。师父待他如己出,师母更是从小对他悉心照料,他们是他在这世上最亲近的人,如今竟然也被黄琛所害!

“哈哈哈……”黄琛见状,发出一阵肆无忌惮的狂笑,“杨少平,你现在是不是很愤怒?是不是很不甘?可惜,一切都晚了。你已经重伤垂危,混沌剑胎在我手中,青云宗也已经是我的了,你所珍视的一切,都将归我所有!”

他抬手,指尖凝聚起一缕黑色的魔气,那是他暗中勾结魔道的铁证。“你以为我只是觊觎你的位置和剑胎吗?我早就和魔道至尊达成了协议,只要我帮他夺取混沌剑胎,他就帮我统一三界。等我掌控了三界,我就是新的神王,而你,只会成为诛仙渊底的一抔黄土,被世人遗忘!”

杨少平的眼神变得愈发冰冷,恨意如同燎原之火,在他心中疯狂燃烧。他看着黄琛那张得意忘形的脸,看着他手中那柄沾染了自己鲜血的破妄神剑,看着他身上那股令人作呕的魔气,心中只剩下一个念头——复仇!

他拼尽最后一丝力气,抬手想要凝聚神之力,哪怕只有一丝希望,他也要拉着黄琛一起坠入这诛仙渊,同归于尽。可他的身体早已不堪重负,神之力刚刚凝聚,就瞬间消散,胸口的伤口再次崩裂,更多的鲜血涌出,视线也变得愈发模糊。

黄琛察觉到了他的意图,脸上的笑容瞬间敛去,取而代之的是一丝狠戾。“怎么?到了这种地步,还想反抗?”他抬手,将指尖的魔气猛地向杨少平射去,“既然你这么不甘,那我就送你一程,让你彻底解脱!”

黑色的魔气如同毒蛇,瞬间穿透了杨少平的身体,所过之处,神脉寸寸断裂,生机飞速流逝。杨少平只觉得浑身剧痛,仿佛有无数根针在扎着他的骨头,他的意识开始逐渐涣散,耳边只剩下黄琛那冰冷的嘲讽声。

“杨少平,安心地去吧。你的青云宗,你的混沌剑胎,你的神王之位,我都会替你好好‘守护’的……”

意识消散的最后一刻,杨少平用尽全身的力气,将自己的神王残魂与混沌剑胎的一丝本源紧紧绑定,心中默念着黄琛的名字,立下最恶毒的誓言——若有来生,我杨少平定要将你碎尸万段,血债血偿,重振青云宗,让你为自己的背叛付出惨痛的代价!

身体渐渐失去了力气,杨少平的目光缓缓垂下,最终彻底失去了光泽。他的身体顺着崖壁,缓缓滑落,坠入了深不见底的诛仙渊,只留下一缕微弱的残魂,裹挟着混沌剑胎的本源,在无尽的黑暗中沉浮。

黄琛站在崖边,看着杨少平的身影彻底消失在深渊之中,脸上露出了满意的笑容。他低头看了看自己手中的破妄神剑,又摸了摸胸口——那里,存放着他从杨少平身上夺走的混沌剑胎,只是剑胎此刻没有丝毫光泽,仿佛陷入了沉睡。

“混沌剑胎,很快,你就会属于我了。”黄琛眼中闪烁着贪婪的光芒,转身离去,背影挺拔,却带着一股彻骨的阴狠。诛仙渊的罡风依旧呼啸,崖边的血迹渐渐被风吹干,仿佛从未发生过这场惊天背叛,唯有那枚散落的玉佩,还在微弱地散发着光晕,见证着神王的陨落。

……

无尽的黑暗中,杨少平的残魂如同风中残烛,在罡风与魔气的侵蚀下,几乎要彻底消散。可那股深入骨髓的恨意,那不灭的复仇之心,却如同火种,支撑着他的残魂,在黑暗中艰难地沉浮。

混沌剑胎的本源包裹着他的残魂,散发着微弱的暖意,一点点修复着他受损的魂体。不知道过了多久,也许是一瞬,也许是万年,那缕残魂突然感受到一股强大的吸力,周围的黑暗开始剧烈地扭曲、旋转,形成一个巨大的时空漩涡。

杨少平的意识被这股吸力拉扯着,不由自主地卷入了漩涡之中。耳边传来呼啸的风声,眼前闪过无数碎片化的画面——他小时候在青云宗修炼的场景,师父师母对他的悉心教导,他与黄琛一起并肩作战的日子,还有黄琛偷袭他时的阴狠嘴脸,师父师母惨死的模样……

“不——!”

杨少平猛地睁开眼睛,剧烈地喘息着,胸口的剧痛仿佛还在,神血喷涌的触感也清晰可辨。他下意识地抬手摸向自己的胸口,却发现那里光滑平整,没有丝毫伤口,身上也不再是那身破碎的神王战甲,而是一身崭新的青云宗宗主服饰,纤尘不染,领口处的青云玉佩,正散发着淡淡的青色光晕。

他环顾四周,发现自己正站在青云宗的大典广场上。广场宽阔平坦,地面由清一色的青石板铺成,光滑如镜,倒映着周围的景象。广场四周,矗立着数十根巨大的石柱,石柱上雕刻着栩栩如生的青云纹路,顶端悬挂着红色的绸带,随风飘扬,显得喜庆而庄重。

广场上人头攒动,密密麻麻地站满了青云宗的弟子,他们身着统一的青色弟子服,脸上带着恭敬与喜悦,目光齐刷刷地投向广场中央的高台。高台上,摆放着一张宽大的案几,案几上摆放着瓜果祭品,两侧站着几位头发花白、气息雄厚的宗门长老,他们面色庄重,眼神中满是欣慰。

空气中弥漫着浓郁的灵气,还有淡淡的檀香,耳边传来弟子们的低声议论,还有悠扬的钟声,回荡在整个青云宗的山谷之中。

这不是诛仙渊,这是青云宗的宗门大典广场!

杨少平的心脏狂跳不止,他有些不敢相信自己的眼睛。他不是已经坠入诛仙渊,魂飞魄散了吗?怎么会突然回到青云宗的宗门大典上?

他下意识地运转体内的神之力,却发现自己的神之力虽然没有达到巅峰状态,却也有着神境初期的修为,而且身体完好无损,没有丝毫受伤的痕迹。他又摸了摸自己的胸口,混沌剑胎的本源就在体内,虽然依旧处于沉睡状态,却散发着稳定的气息,没有丝毫损伤。

“我……重生了?”杨少平的心中涌起一股巨大的狂喜,随之而来的,是更加浓烈的恨意。他抬头望向高台下方,目光在人群中快速搜索着,很快,就找到了那道熟悉的身影。

黄琛就站在人群的前排,一身月白色的大师兄服饰,面容俊朗,嘴角带着温和的笑容,正与身边的几位弟子低声交谈着,看起来温文尔雅,人畜无害。若是前世的杨少平,一定会被他这副模样所欺骗,以为他是真心为自己高兴,真心为青云宗感到欣慰。

可现在,杨少平看着他这副虚伪的嘴脸,只觉得无比恶心。他清楚地记得,就是这副嘴脸的主人,在不久的将来,会勾结魔道,背叛自己,杀害师父师母,屠戮忠于自己的弟子,夺走混沌剑胎,将自己推入诛仙渊,鸠占鹊巢,成为青云宗的伪宗主!

“宗主,您醒了?”一个温和的声音在身边响起,杨少平回头,看到了自己的贴身弟子林默。林默身着青色弟子服,面容清秀,眼神中满是关切,正小心翼翼地看着他,“您刚才站在这里,突然闭着眼睛,脸色不太好,是不是修炼出了什么岔子?”

林默,前世忠于自己的核心弟子之一,为了保护自己,被黄琛的手下残忍杀害,死状凄惨。

看到林默活生生地站在自己面前,杨少平的心中一暖,眼底闪过一丝不易察觉的动容。他拍了拍林默的肩膀,声音尽量保持平静:“我没事,只是刚才想起了一些事情,有些失神。”

林默松了口气,点了点头:“没事就好。宗主,大典马上就要开始了,长老们都在等您上台呢。这次是您突破神境、带回混沌剑胎的庆功大典,整个青云宗都在为您高兴,还有其他宗门的使者,也都前来祝贺了。”

突破神境、带回混沌剑胎的庆功大典!

杨少平的心中瞬间明白了过来。他重生了,回到了自己刚刚突破神境,从上古秘境中带回混沌剑胎,青云宗为他举办庆功大典的这一天!

他清楚地记得,就是这一天,黄琛会假意前来祝贺,表面上对他恭敬有加,暗地里却在试探混沌剑胎的下落,同时观察他的状态,为后续的背叛布局。也是从这一天开始,黄琛开始暗中勾结魔道,拉拢宗门内奸,一步步实施自己的阴谋。

前世的他,就是因为太过信任黄琛,没有察觉到他的异样,才给了他可乘之机,最终落得家破人亡、魂飞魄散的下场。

“好,我知道了。”杨少平缓缓点头,眼底的动容渐渐被冰冷的寒意取代。他抬起头,目光再次投向黄琛,眼神中没有了前世的信任与温柔,只剩下彻骨的冰冷与杀意。

黄琛似乎察觉到了他的目光,转过头,与他对视。四目相对的瞬间,黄琛的眼中闪过一丝不易察觉的诧异,似乎没想到杨少平会用这样的眼神看着自己。但很快,他就恢复了温和的笑容,对着杨少平微微躬身,露出一副恭敬的模样。

杨少平没有回应他的恭敬,只是冷冷地收回了目光。他知道,这一世,一切都将不同。

黄琛,你欠我的,欠师父师母的,欠那些忠于我的弟子的,欠青云宗的,我都会一一讨回来!这一世,我不会再对你有任何信任,不会再给你任何背叛的机会!混沌剑胎是我的,青云宗是我的,神王之位也是我的,你所觊觎的一切,我都会牢牢守住,而你,终将为自己的野心和背叛,付出最惨痛的代价!

“宗主,该上台了。”林默的声音再次响起,打断了杨少平的思绪。

杨少平深吸一口气,压下心中的恨意与杀意,整理了一下身上的宗主服饰,迈步向高台走去。每一步,都沉稳而坚定,仿佛踩在通往复仇之路的基石上。

广场上的弟子们看到他走来,纷纷安静下来,目光中满是恭敬与崇拜,低声欢呼着“宗主”。几位长老也纷纷转过身,对着他点了点头,脸上露出欣慰的笑容。

杨少平走上高台,站在案几前,目光缓缓扫过广场上的众人。他看到了那些忠于自己的弟子,看到了几位真心为自己高兴的长老,也看到了人群中那道虚伪的身影——黄琛正仰着头,看着他,嘴角依旧带着温和的笑容,但眼底深处,却藏着一丝不易察觉的贪婪与算计。

就在这时,黄琛迈步走出人群,缓缓走上高台,手中捧着一个精致的玉盒,来到杨少平面前,躬身行礼:“师弟,恭喜你突破神境,成功带回混沌剑胎,为我青云宗争光!这是我为你准备的贺礼,希望你能喜欢。”

他的声音温和,语气恭敬,看起来真诚无比,任谁看了,都会觉得他是真心为杨少平高兴。

杨少平低头看着他手中的玉盒,又抬眼看向黄琛的脸,嘴角勾起一抹冰冷的弧度。他清楚地记得,这个玉盒里装的,是一枚看似珍贵、实则蕴含着微弱魔气的玉佩,黄琛就是想通过这枚玉佩,试探他的神之力,同时暗中侵蚀他的身体,为后续的偷袭做铺垫。

前世的他,毫无防备地收下了这枚玉佩,也正是因为这枚玉佩,他在冲击至高神境时,神脉受到了轻微的侵蚀,才给了黄琛可乘之机。

“多谢大师兄。”杨少平的声音平淡,没有丝毫波澜,伸出手,却没有去接那个玉盒,而是目光紧紧地盯着黄琛的眼睛,一字一句地说道,“只是,我近日修炼,感知有些敏锐,总觉得身边有一些不纯净的气息,不知道大师兄有没有察觉到?”

黄琛的身体微微一僵,脸上的笑容有瞬间的凝固,眼底闪过一丝慌乱,但很快就掩饰了过去。他抬起头,一脸疑惑地看着杨少平:“师弟说笑了,我青云宗乃是正道第一宗门,灵气纯净,怎么会有不纯净的气息?或许是师弟刚刚突破神境,气息还未稳定,才会有这样的错觉吧。”

“是吗?”杨少平挑了挑眉,语气中带着一丝不易察觉的嘲讽,“或许是吧。只是,有些东西,表面看起来纯净无瑕,内里却藏着污秽不堪的东西,大师兄说,对不对?”

说话间,他的目光有意无意地扫过黄琛手中的玉盒,又落在黄琛的胸口——那里,存放着他暗中勾结魔道的信物,也是他未来夺取混沌剑胎的重要依仗。

黄琛的心脏猛地一跳,心中的不安越来越强烈。他总觉得,今天的杨少平,似乎有些不一样。以往的杨少平,仁厚温和,对他无比信任,从来不会用这样的语气对他说话,更不会用这样的眼神审视他。

难道,他察觉到了什么?

这个念头刚刚升起,就被黄琛强行压了下去。不可能,他的计划天衣无缝,而且杨少平刚刚突破神境,正是志得意满的时候,怎么可能会怀疑自己?一定是自己多心了。

他定了定神,再次露出温和的笑容,将玉盒递到杨少平面前:“师弟说得有道理。或许是我太过粗心,没有察觉到。不过,这贺礼是我的一片心意,师弟还是收下吧。”

杨少平看着他手中的玉盒,又看了看他那副强装镇定的模样,心中冷笑。黄琛,你果然还是和前世一样,虚伪又狡猾。不过,这一世,我不会再让你得逞。

他没有去接玉盒,反而缓缓抬起手,指尖凝聚起一缕淡淡的神之力,看似随意地拂过玉盒的表面。瞬间,玉盒中那股微弱的魔气被神之力触动,发出一丝细微的黑色光晕,一闪而逝。

这一幕,虽然短暂,却被杨少平清晰地捕捉到了。而黄琛,也因为这股魔气被触动,身体再次微微一僵,眼神中的慌乱再也掩饰不住。

杨少平的嘴角,勾起一抹冰冷的杀意。

游戏,现在才刚刚开始。

他看着黄琛,缓缓开口,声音不大,却带着一股不容置疑的威严:“大师兄,这贺礼,我看还是先放一放吧。今日是宗门大典,不如,我们先好好庆祝一番?毕竟,这混沌剑胎,可是我青云宗的至宝,也是我们未来守护三界的依仗,值得好好庆贺。”

黄琛闻言,心中的不安更加强烈。他能感觉到,杨少平的目光一直落在自己身上,那目光冰冷而锐利,仿佛能看穿自己所有的伪装和阴谋。他强压下心中的慌乱,点了点头:“师弟说得是,是我考虑不周。今日是大典,理应好好庆祝。”

杨少平没有再说话,只是转过身,目光投向广场上的众人,脸上露出了一抹看似温和,实则冰冷的笑容。他知道,黄琛已经开始怀疑自己,接下来,黄琛一定会加快布局,暗中对自己下手。

但他并不害怕。

前世的悲剧,他不会再让其重演。这一世,他拥有前世的记忆,知道黄琛所有的阴谋和布局,他会步步为营,先发制人,清理宗门内奸,揭穿黄琛的伪装,夺回属于自己的一切。

而此刻,站在他身后的黄琛,看着他的背影,眼底闪过一丝阴狠的光芒。他确定,今天的杨少平,一定有问题。不管他察觉到了什么,自己都不能坐以待毙。混沌剑胎,他势在必得,青云宗的宗主之位,他也势在必得!

黄琛悄悄抬起手,指尖凝聚起一缕微弱的魔气,暗中看向杨少平的后背,眼神中闪过一丝杀意。只要杨少平敢阻碍自己,他不介意,提前动手!

广场上的钟声再次响起,庆典正式开始。弟子们的欢呼声此起彼伏,长老们的脸上满是欣慰,可谁也没有察觉到,高台上的两位核心人物,心中早已掀起了滔天巨浪,一场关乎青云宗命运、关乎三界安危的阴谋与复仇,正在悄然拉开序幕。

杨少平站在高台上,目光平静地看着下方的人群,心中却早已做好了准备。他知道,一场暴风雨即将来临,而他,将是这场暴风雨的主宰。黄琛,你的死期,不远了。

就在庆典进行到高潮,杨少平准备发表讲话之际,他突然感觉到一股微弱的杀气,从身后传来。他嘴角的笑容愈发冰冷,没有回头,只是在心中默念:黄琛,你果然忍不住了。也好,就让我们,好好算一算这笔账! 

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 18:32:32 HTTP/2.0 GET : https://f.mffb.com.cn/a/477896.html
  2. 运行时间 : 0.085079s [ 吞吐率:11.75req/s ] 内存消耗:4,669.13kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=97ce8f93d02a0c0860d4d1beb8f16635
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000544s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000836s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000313s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000265s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000476s ]
  6. SELECT * FROM `set` [ RunTime:0.000172s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000607s ]
  8. SELECT * FROM `article` WHERE `id` = 477896 LIMIT 1 [ RunTime:0.000670s ]
  9. UPDATE `article` SET `lasttime` = 1774607553 WHERE `id` = 477896 [ RunTime:0.008407s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000234s ]
  11. SELECT * FROM `article` WHERE `id` < 477896 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000368s ]
  12. SELECT * FROM `article` WHERE `id` > 477896 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000404s ]
  13. SELECT * FROM `article` WHERE `id` < 477896 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000671s ]
  14. SELECT * FROM `article` WHERE `id` < 477896 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000878s ]
  15. SELECT * FROM `article` WHERE `id` < 477896 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001923s ]
0.086684s