当前位置:首页>python>AI+Python项目001:电子发票信息提取

AI+Python项目001:电子发票信息提取

  • 2026-03-27 09:25:25
AI+Python项目001:电子发票信息提取

      各位苦逼的财务工作者,咱先唠个实在的,每月需认证的发票,你们是怎么处理的?

      在2025年之前,我是把电子发票的信息复制粘贴到模板里,然后交给我们的税政大姐。碰到发票量大的时候,起码一整天时间耗在几百张电子发票上。这个活交到我这个体弱多病老眼昏花的小会计手里,不仅效率低下,错误率还高。期间考虑用WPS打开XML发票,结果发票号码缩略显示问题解决不了。

      直到,2025年国产大语言模型deepseek横空出世,原本平静时空被按下了加速键,一种前所未有的孤独感瞬间将我包围起来,仿佛伫立在时代的车流中央,任由那尾流卷起衣衫扬起灰尘,迷乱中已睁不开眼。好了不扯了,既然AI会写代码,那应该可以按照我复制粘贴发票信息的流程转换为Python代码,进而解决问题。说干就干,简单学习了一下Python的安装和基础语法之后,开始分析并拆解了XML发票的结构,把要提取的字段、提取步骤、输出格式,一条条清晰地告诉deepseek,经过生成、验证、报错再生成以及N次调试后。终于!精准提取到了所需要的信息。

      下面,我将优化后的代码以及使用方法分享给大家,下列代码由AI生成,欢迎大家取用。

一、操作界面展示

上述发票260张发票5秒完成。

二、完整代码

    # 导入所需库import osimport tkinter as tkfrom tkinter import ttk, filedialog, messageboximport pdfplumberimport pandas as pdimport refrom unicodedata import normalizeimport xml.etree.ElementTree as ETfrom datetime import datetime# ================== 通用配置 ==================COMMON_COLUMNS = [    "数电票号码""开票日期""金额""税额""税率",    "含税总额""有效抵扣税额""购买方识别号""销售方名称""发票类型"]# ================== PDF解析模块 ==================class PDFInvoiceParser:    @staticmethod    def preprocess_text(text):        text = normalize('NFKC', text)        text = re.sub(r'[\n\r]+'' ', text)        text = re.sub(r'\s{2,}'' ', text)        return text.strip()    @staticmethod    def extract_field(patterns, text):        for pattern in patterns:            match = re.search(pattern, text)            if match:                value = match.group(1).strip()                if '¥' in value or '¥' in value:                    value = value.replace('¥''').replace('¥''').strip()                return value        return None    @classmethod    def parse_pdf(cls, pdf_path):        try:            with pdfplumber.open(pdf_path) as pdf:                full_text = ""                for page in pdf.pages:                    text = page.extract_text()                    if text:                        full_text += cls.preprocess_text(text) + "\n"                patterns = {                    "数电票号码": [                        r'发票号码\s*[::]\s*(\d{20})',                        r'(?:电子票号|票号)\s*[::]\s*(\d+)',                    ],                    "开票日期": [                        r'开票日期\s*[::]\s*(\d{4}年\d{1,2}月\d{1,2}日)',                        r'日期\s*[::]\s*(\d{4}-\d{2}-\d{2})',                    ],                    "含税总额": [                        r'¥\s*(\d+\.?\d*)\s*票价\s*[::]',                        r'票价\s*[::]\s*¥\s*(\d+\.?\d*)',                        r'¥\s*(\d+\.?\d*)',                        r'¥\s*(\d+\.\d{2})',                        r'\b(\d+\.\d{2})\s*元\b',                    ],                    "购买方识别号": [                        r'统一社会信用代码\s*[::]\s*([0-9A-Z]{18})',                        r'纳税人识别号\s*[::]\s*(\S+)',                    ]                }                result = {                    "数电票号码"None,                    "开票日期"None,                    "金额"None,                    "税额"None,                    "税率""9%",                    "含税总额"None,                    "有效抵扣税额"None,                    "购买方识别号"None,                    "销售方名称""",                    "发票类型""铁路电子客票"                }                for field in patterns:                    result[field] = cls.extract_field(patterns[field], full_text)                # ----- 提取乘客姓名作为销售方名称(优化版)-----                # 模式1:身份证号(10位数字 + 4星 + 4位(数字或X))后跟姓名                name_match = re.search(r'(\d{10})\*{4}([0-9X]{4})\s*([\u4e00-\u9fa5]{1,4})', full_text)                if name_match:                    result["销售方名称"] = name_match.group(3)                else:                    # 模式2:直接从票价信息后提取姓名                    alt_match = re.search(r'票价[::]\s*¥\s*\d+\.?\d*\s*([\u4e00-\u9fa5]{1,4})', full_text)                    if alt_match:                        result["销售方名称"] = alt_match.group(1)                    else:                        # 模式3:单独出现的2-4个汉字(如无身份证号的情况)                        standalone_match = re.search(r'^\s*([\u4e00-\u9fa5]{2,4})\s*$', full_text, re.MULTILINE)                        if standalone_match:                            result["销售方名称"] = standalone_match.group(1)                        else:                            result["销售方名称"] = ""                # -----------------------------------------                # 日期格式处理                if result["开票日期"and '年' in result["开票日期"]:                    date_match = re.match(r'(\d{4})年(\d{1,2})月(\d{1,2})日', result["开票日期"])                    if date_match:                        year, month, day = date_match.groups()                        result["开票日期"] = f"{year}-{month.zfill(2)}-{day.zfill(2)}"                # 金额处理                if result["含税总额"]:                    try:                        total_str = result["含税总额"].replace(',''')                        if '.' not in total_str:                            total_str += '.00'                        total = float(total_str)                        result["含税总额"] = round(total, 2)                        result["金额"] = round(total / 1.092)                        result["税额"] = round(total - result["金额"], 2)                        result["有效抵扣税额"] = result["税额"]                    except Exception as e:                        print(f"PDF金额转换失败:{str(e)}")                        return None                if all(result.get(f) for f in ["数电票号码""开票日期""含税总额"]):                    return result                return None        except Exception as e:            print(f"PDF解析异常:{str(e)}")            return None# ================== XML发票解析模块 ==================class XMLInvoiceParser:    @staticmethod    def parse_xml(xml_path):        try:            tree = ET.parse(xml_path)            root = tree.getroot()            data = {                "数电票号码": root.findtext('.//EIid'),                "开票日期": root.findtext('.//IssueTime'),                "金额": root.findtext('.//TotalAmWithoutTax'),                "税额": root.findtext('.//TotalTaxAm'),                "税率"None,                "含税总额": root.findtext('.//TotalTax-includedAmount'),                "有效抵扣税额": root.findtext('.//TotalTaxAm'),                "购买方识别号": root.findtext('.//BuyerInformation/BuyerIdNum'),                "销售方名称": root.findtext('.//SellerName'),                "发票类型": root.findtext('.//GeneralOrSpecialVAT/LabelName')            }            # 数值格式转换            for field in ['金额''税额''含税总额''有效抵扣税额']:                if data[field]:                    try:                        data[field] = float(data[field])                    except ValueError:                        data[field] = None            # 日期格式化处理            if data["开票日期"]:                try:                    dt_str = data["开票日期"].split('T')[0]                    dt = datetime.strptime(dt_str, "%Y-%m-%d")                    data["开票日期"] = dt.strftime("%Y-%m-%d")                except Exception as e:                    print(f"日期格式转换失败: {str(e)}")                    data["开票日期"] = None            # 税率处理(转换为百分比)            tax_rates = [rate.text for rate in root.findall('.//TaxRate')]            if tax_rates:                try:                    if len(tax_rates) > 1:                        rates = list(set([float(r) for r in tax_rates]))                        if len(rates) > 1:                            data["税率"] = "多税率"                        else:                            data["税率"] = f"{int(rates[0]*100)}%"                    else:                        data["税率"] = f"{int(float(tax_rates[0])*100)}%"                except ValueError:                    data["税率"] = "6%"            return {k: v if v is not None else "" for k, v in data.items()}        except Exception as e:            print(f"XML解析失败:{str(e)}")            return None# ================== GUI主程序 ==================class InvoiceProcessorApp(tk.Tk):    def __init__(self):        super().__init__()        self.title("发票信息提取工具—张了个帆")        self.geometry("720x220")        self.configure_ui()    def configure_ui(self):        self.style = ttk.Style()        self.style.theme_use('clam')        self.style.configure('TButton', font=('微软雅黑'10))        self.style.configure('Accent.TButton', foreground='white', background='#2196F3')        main_frame = ttk.Frame(self, padding=20)        main_frame.pack(fill=tk.BOTH, expand=True)        # 路径选择组件        path_frame = ttk.Frame(main_frame)        path_frame.pack(fill=tk.X, pady=5)        ttk.Label(path_frame, text="请选择发票所在文件夹:").pack(side=tk.LEFT)        self.path_var = tk.StringVar()        entry = ttk.Entry(path_frame, textvariable=self.path_var, width=50)        entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)        ttk.Button(path_frame, text="浏览...", command=self.browse_directory).pack(side=tk.LEFT)        # 操作按钮        btn_frame = ttk.Frame(main_frame)        btn_frame.pack(pady=10)        ttk.Button(btn_frame, text="开始处理", style='Accent.TButton'                  command=self.process_files).pack(side=tk.LEFT, padx=5)        # 状态栏        self.status_var = tk.StringVar(value="就绪状态:等待操作")        ttk.Label(main_frame, textvariable=self.status_var, foreground="#666").pack()    def browse_directory(self):        path = filedialog.askdirectory(title="选择发票文件夹")        if path:            self.path_var.set(path)            self.status_var.set(f"已选择目录:{path}")    def process_files(self):        path = self.path_var.get()        if not path:            messagebox.showwarning("提示""请先选择文件夹")            return        self.status_var.set("正在解析发票...")        self.update()        try:            all_data = []            error_log = {'PDF': [], 'XML': []}            # 处理PDF文件            pdf_data = []            for filename in os.listdir(path):                if filename.lower().endswith(".pdf"):                    self.status_var.set(f"处理PDF: {filename[:20]}...")                    self.update()                    result = PDFInvoiceParser.parse_pdf(os.path.join(path, filename))                    if result:                        pdf_data.append(result)                    else:                        error_log['PDF'].append(filename)            all_data.extend(pdf_data)            # 处理XML文件            xml_data = []            for filename in os.listdir(path):                if filename.lower().endswith(".xml"):                    self.status_var.set(f"处理XML: {filename[:20]}...")                    self.update()                    result = XMLInvoiceParser.parse_xml(os.path.join(path, filename))                    if result:                        xml_data.append(result)                    else:                        error_log['XML'].append(filename)            all_data.extend(xml_data)            # 生成带时间戳的文件名            if all_data:                timestamp = datetime.now().strftime("%Y%m%d%H%M%S")                excel_name = f"发票信息提取结果_{timestamp}.xlsx"                excel_path = os.path.join(path, excel_name)                df = pd.DataFrame(all_data)[COMMON_COLUMNS]                # 设置数值格式                with pd.ExcelWriter(excel_path, engine='openpyxl'as writer:                    df.to_excel(writer, index=False)                    worksheet = writer.sheets['Sheet1']                    # 设置金额列为数值格式                    for col in ['C''D''F''G']:  # C=金额, D=税额, F=含税总额, G=有效抵扣税额                        for cell in worksheet[col]:                            cell.number_format = '0.00'                report = [                    f"■ 成功处理文件:",                    f"  - PDF文件: {len(pdf_data)}个",                    f"  - XML文件: {len(xml_data)}个",                    f"■ 保存路径:{excel_path}"                ]                if error_log['PDF'or error_log['XML']:                    report.append("\n▼ 失败文件 ▼")                    if error_log['PDF']:                        report.append(f"PDF文件:\n• " + "\n• ".join(error_log['PDF']))                    if error_log['XML']:                        report.append(f"XML文件:\n• " + "\n• ".join(error_log['XML']))                messagebox.showinfo("处理完成""\n".join(report))                self.status_var.set(f"处理完成!生成文件:{excel_path}")            else:                messagebox.showwarning("警告""没有找到可处理的发票文件")                self.status_var.set("未找到有效文件")        except Exception as e:            messagebox.showerror("系统错误"f"处理异常:{str(e)}")            self.status_var.set("处理异常")        finally:            self.status_var.set("就绪状态:等待新任务")if __name__ == "__main__":    app = InvoiceProcessorApp()    app.mainloop()

    三、代码关键部分解释

    1. 多格式解析

      • PDF解析:利用pdfplumber提取PDF文本,通过正则表达式匹配关键字段(发票号码、开票日期、含税总额、购买方识别号)。

      • XML解析:备用模块,使用xml.etree.ElementTree解析XML格式的电子发票,提取相同字段。

      • 统一输出:将两种格式的解析结果合并为统一的DataFrame结构,确保列名一致。

    2. 金额计算与税率处理

      • 提取的含税总额(票价)用于反算不含税金额和税额(默认税率9%),并填入有效抵扣税额。

      • 对金额字符串进行清理(去除逗号、补全小数位),转换为浮点数后保留两位小数。

    3. 日期标准化

      • 将中文日期格式(如“2026年01月22日”)转换为标准ISO格式(YYYY-MM-DD),便于后续数据分析。

    4. 图形用户界面(GUI)

      • 使用tkinter构建简洁界面,包含文件夹选择、处理按钮和状态提示。

      • 处理过程中实时更新状态,完成后弹出统计报告,并生成带时间戳的Excel文件。

    5. Excel输出

      • 利用pandas将数据写入Excel,通过openpyxl设置金额列为数值格式(保留两位小数),确保财务数据的准确性

    四、运行前置条件

    • Python版本:需Python 3.6及以上。

    • 依赖库(使用pip安装)

    pip3 install pdfplumber pandas openpyxl

      五、使用说明

      1. 准备发票文件

        将所有需要处理的XML格式电子发票、铁路电子客票原版PDF文件放入同一个文件夹。

      2. 运行程序

        • 运行程序,弹出GUI窗口。

        • 点击“浏览...”按钮,选择存放发票的文件夹。

        • 点击“开始处理”,程序自动将遍历文件夹中的所有PDF和XML文件,逐一解析。

      3. 查看结果

        • 处理完成后,程序会在所选文件夹中生成一个名为发票信息提取结果_YYYYMMDDHHMMSS.xlsx的Excel文件。

        • Excel包含以下列:数电票号码、开票日期、金额、税额、税率、含税总额、有效抵扣税额、购买方识别号、销售方名称、发票类型。

        • 若部分文件解析失败,程序会弹出报告列出失败的文件名,便于人工核查。

      4. 注意事项

        • 一张发票中存在多种税率时,提取税率结果为“多税率”。

        • 我单位差额征收发票主要为劳务费,2026年度默认税率为6%,注意识别。本工具适配所有XML格式电子专票及普票,以及原版PDF高铁票。

      我的100个财务工具计划:邀你一起破局

         AI是大脑,Python是手和脚,人类指引方向我也想挑战一下用AI制作100个Python工具,解决财务工作中费时间、易出错、重复率高的痛点难点问题——这也是我开通这个公众号的初衷。

             但一个人的能力和思维终究有限,很容易陷入闭门造车的困境。所以想真诚地邀请你,欢迎有需求、有想法以及勇于突破传统财务工作方式的小伙伴加入,让我们一起探索AI时代的财务之路!如果你在财务工作中遇到重复性的问题,都可以在评论区告诉我以便深入的沟通交流

            后续我将陆续发布各类财务实用性小工具,非常期待你的留言,让我们一起用AI赋能财务!


      最新文章

      随机文章

      基本 文件 流程 错误 SQL 调试
      1. 请求信息 : 2026-03-27 11:29:32 HTTP/2.0 GET : https://f.mffb.com.cn/a/480713.html
      2. 运行时间 : 0.140110s [ 吞吐率:7.14req/s ] 内存消耗:4,999.08kb 文件加载:140
      3. 缓存信息 : 0 reads,0 writes
      4. 会话信息 : SESSION_ID=8e8ea18aa0acaafd09ebca3ff4adfb5b
      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.000386s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
      2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000604s ]
      3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000367s ]
      4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000272s ]
      5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000485s ]
      6. SELECT * FROM `set` [ RunTime:0.002099s ]
      7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000600s ]
      8. SELECT * FROM `article` WHERE `id` = 480713 LIMIT 1 [ RunTime:0.006130s ]
      9. UPDATE `article` SET `lasttime` = 1774582172 WHERE `id` = 480713 [ RunTime:0.008759s ]
      10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000337s ]
      11. SELECT * FROM `article` WHERE `id` < 480713 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000427s ]
      12. SELECT * FROM `article` WHERE `id` > 480713 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000346s ]
      13. SELECT * FROM `article` WHERE `id` < 480713 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001764s ]
      14. SELECT * FROM `article` WHERE `id` < 480713 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003898s ]
      15. SELECT * FROM `article` WHERE `id` < 480713 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.012396s ]
      0.141871s