乐于分享
好东西不私藏

约束驱动:AI 时代软件工程的防御性范式

约束驱动:AI 时代软件工程的防御性范式

历史的回响:每一次抽象层跃迁都伴随治理危机

1950年代,编译器出现。汇编程序员惊呼"高级语言会让工程技能贬值",但真正的危机并非技能替代,而是“劣化代码的规模化”——当写代码变得容易,未经训练的工程师开始编写无法维护的面条式代码。

1990年代,垃圾回收普及。C 程序员嘲笑 Java 是"玩具语言",但企业很快发现,"内存安全”并不等于“架构安全”——开发者不再关心指针,却开始滥用全局状态,创造出更隐蔽的耦合灾难。

2000年代,SaaS 与低代码崛起。人们担心"软件工程师会变成配置脚本的搬运工",现实却是"业务逻辑与基础设施边界模糊"导致的治理噩梦。

2025年,我们站在同样的历史节点。当 Cursor 能在五分钟内生成完整功能,当 Claude Code 能编写自身90%的代码,恐慌再次席卷行业。Stack Overflow 调查显示开发者对 AI 准确性的信任度跌至29%,GitLab 调研表明73%的团队遭遇过"氛围编码(Vibe Coding)"导致的生产事故。

但历史告诉我们:软件工程从未在抽象层跃迁中死亡,只是问题的定义权发生了转移。从"如何编写机器指令"到"如何设计系统契约",今天我们必须完成从"实现细节掌控者"到"约束定义者"的跃迁。

这不是能力的退化,而是范式的升维。


核心诊断:AI 编程的"约束缺失症"

当前 AI Coding带来的危机,本质上是"工程约束"的空白。我们让 AI 生成代码,却没有建立"什么是不可接受行为"的判定标准。

症状表现:三类系统性风险

类型A:隐式架构决策当你说"写一个安全的登录功能",AI 替你做了一系列本该由架构师做的决策:它"感觉"字符串拼接 SQL 更直接,于是忽略了参数化查询;它"认为"异常应该打印日志,而非触发熔断。这些不是 Bug,是未被审视的架构债务

类型B:测试即盲点你让 AI"写几个测试",它生成了正确密码能登录、错误密码抛异常的用例。代码通过测试,但生产环境一跑就崩——因为测试没要求"防止 SQL 注入",AI 就没做防护;测试没要求"防止枚举攻击",AI 就返回了不同的错误提示。TDD 在 AI 时代暴露了致命缺陷:案例正确不等于形式正确。

类型C:上下文衰减LLM 是无状态的。每一次交互都是独立事务,所谓的"对话历史"只是应用层将过去的文本作为前缀重新提交。这种模拟是昂贵、有损且不可靠的。当你把组件、Hook、API、类型定义一次性塞给 AI,它仿佛被洪水淹没,连核心指令都忽略了。

现实校准:当前 LLM 的约束遵循能力边界

在推行约束驱动之前,我们必须诚实面对当前大语言模型的能力现状。尽管 Claude、GPT等模型在代码生成上表现优异,但它们在复杂约束遵循方面仍存在显著局限:

  1. 长上下文下的约束遗忘:当约束清单超过一定量的核心规则或代码生成长度超过一定行数时(不同大模型表现不同),AI 对前置约束的遵循率显著下降,容易陷入"局部最优而全局违规"的陷阱。

  2. 隐性约束冲突时的取舍失当:当性能约束与安全约束冲突(如"必须在 200ms 内完成" vs "必须使用加密哈希"),AI 往往无法像人类架构师那样基于业务价值做出合理权衡,可能为满足性能而牺牲安全。

  3. 跨文件约束一致性困难:约束往往涉及多个模块间的协调(如"当 Service A 修改状态时,必须通知 Service B"),AI 在生成分布式代码时难以维持这种跨上下文的约束一致性。

这些局限性意味着:CDAC 并非银弹,它适用于约束数量可控边界相对明确的场景。对于需要数百条形式化规则的超高完整性系统,传统形式化方法仍不可替代。

根本原因:自然语言的歧义性

软件工程的核心不是"写代码",而是在多维度力量间做权衡:性能 vs 安全、时间 vs 成本、技术债务 vs 交付速度。当你用自然语言说"处理一下错误情况",AI 无法知晓这是关键路径还是应该优雅降级。

缺乏精确约束导致"我以为你懂"的惨案。 AI 本质是概率生成器,Prompt 越模糊,它的"创造空间"越大,出错的方差也就越大。


范式定义:从 Vibe Coding 到约束驱动(CDAC)

为了填补约束真空,我提出约束驱动式 AI 编程(Constraint-Driven AI Coding, CDAC)——这不是取代 AI 编程,而是为其建立不可逾越的边界。

重要区分:这不是传统 SDD

在软件工程史中,Specification-Driven Development(规范驱动开发)通常指使用形式化方法(如 B 方法、VDM、TLA+)先写数学级严谨的规约,再人工实现。那种规约追求完备性无歧义性,使用严格的形式语言,目标是证明系统绝对正确。

CDAC 与之有本质区别:

维度
传统 SDD(形式化方法)
CDAC(约束驱动式 AI 编程)
目标受众
人类工程师(消除人类理解歧义)
大语言模型(限制概率模型生成方差)
完备性要求
必须定义系统全部合法行为(数学完备)
渐进式完备
:定义已知的禁止性行为,通过对抗循环逐步发现盲区
表达形式
数学符号(谓词逻辑、状态机、Z 语言)
结构化自然语言(Markdown 约束清单)
核心哲学
"精确描述系统应该是什么"
"划定 AI 绝不能触碰的红线"
容错机制
形式化证明,零容错(一旦规范错,系统必错)
运行时断言 + AI 自检 + 迭代修补(允许约束进化)
验证方式
定理证明、模型检验
对抗性测试、契约自动验证、Fuzzing

关键洞察: 传统 SDD 是建筑蓝图(精确、静态、供人执行,要求一次性完备);CDAC 是自动驾驶的交规(划定车道、红绿灯、限速,允许 AI 在约束内自主决策,承认人类无法一次性预见所有边界,通过对抗循环逼近安全)。

我们刻意使用"约束"(Constraint)而非"规范"(Specification),正是因为 AI 时代的代码生成不需要数学完备的规约,而需要防御性护栏(Guardrails)——就像交通信号灯不告诉你该怎么开车,但明确告诉你什么时候必须停下。

术语警示:关于"前置条件"与"不变式"

CDAC 虽然借用了 Hoare Logic 的概念框架(前置条件、不变式、后置条件)来组织思维,但剥离了数学严格性。在 CDAC 中,这些只是结构化的约束描述模板(Markdown 清单),允许自然语言的模糊性和不完备性,通过后续对抗迭代逐步收紧,而非传统形式化方法要求的一次性完备定义。

关键区别:

  • 传统 SDD:前置条件 = 数学谓词,如:
∀x ∈ ℕ, x > 0 ∧ x < MAX
  • CDAC:前置条件 = 防御性检查清单,如:
[ ] amount > 0 且为整数[ ] from_account.balance >= amount[ ] 并发场景下持有 from_account 行级锁

三种范式对比

范式
阶段
输入特征
产出置信度
适用场景
Vibe Coding(氛围编码)
探索
自然语言描述需求
低(原型级)
验证可行性、快速原型、个人项目
TDD 式 AI
应试
测试用例驱动
中(案例级)
已有明确接口定义的功能迭代
CDAC
工程
约束清单
(前置/后置/不变式/禁区)
高(边界级)
核心基础设施、资金/安全关键系统

关键洞察: 这三种范式不是互斥的,而是置信度递进的阶梯。只有到达 CDAC 阶段,AI 编程才真正具备生产级可靠性。

CDAC 的核心机制:约束优先与对抗性迭代

不同于 TDD 的"测试后置验证",也不同于传统 SDD 的"完备前置定义",CDAC 采用"防御性约束 + 对抗性迭代":

  1. 人类(架构师):定义红线约束(什么绝对不允许发生)
  2. AI(实现者):在约束边界内生成代码(拥有实现自由度)
  3. 验证工具(守门员):检查约束是否被违反,若发现 AI 钻空子,反馈约束清单
  4. 约束进化:通过"AI 突破约束 → 人类修补约束"的对抗循环,逐步收紧生成空间

约束分层策略(关键实践)

考虑到当前 LLM 的约束遵循能力限制,我们建议将约束分为两个层级:

  • 硬约束(Hard Constraints):绝对不可违反的红线。如"禁止 SQL 拼接"、"资金守恒"、"不得硬编码密钥"。这类约束必须配套自动化扫描工具,AI 一旦违反必须立即阻断。

  • 软约束(Soft Constraints):应尽量满足的指导原则,如"优先使用 Stream API"、"函数实现不超过 50 行"。AI 可能因上下文限制无法满足,需人工 Review 时判断。

只有硬约束才是 CDAC 的核心,软约束属于代码风格范畴。 这种分层避免了约束过多导致的 AI 遗忘问题,也符合人类认知的有限理性。

思想实验对比:转账功能实现

  • Vibe Coding(氛围编码):输入"写一个转账功能" → AI 生成基础代码,可能忘记事务 → 生产环境用户投诉后修复(成本高)
  • TDD 式 AI:输入"测试:正常转账、余额不足" → AI 生成通过测试的代码,但并发下可能超扣余额 → 上线后压力测试发现(成本中)
  • CDAC:输入"硬约束:前置:amount>0 && from.balance≥amount;不变式:系统总金额守恒;后置:事务原子性;禁区:不得使用无索引查询" → AI 在约束边界内生成 → 生成前规范完整性检查,生成后契约自动验证,若 AI 绕过约束(如使用隐式类型转换),立即触发拦截(成本低)

CDAC 的三重战略优势:

  1. 消除幻觉自由度:约束越具体,AI 的生成方差越小。当你不说"处理错误",而说"当 balance<amount 时抛出 InsufficientFundsException 且双方余额不变",AI 失去了"创造"错误处理方式的空间。

  2. 从案例正确到边界正确:TDD 验证"这几个案例通过",CDAC 验证已知的禁止性边界是否被违反,并通过对抗性测试(Red Teaming)不断发现新的盲区(Shadow Constraints)。约束强迫 AI 考虑防御边界而非测试样本

  3. 渐进式完备,建立进化机制:与传统 SDD 追求一次性写对规范不同,CDAC 承认人类无法预见所有边界情况。通过"对抗性约束迭代",让 AI 尝试攻击约束,发现漏洞后补强,形成防御纵深。

轻量级实践:约束清单

CDAC 不强制要求形式化数学符号(如 TLA+),而是采用结构化约束清单,借鉴 Hoare Logic 的边界检查思想(输入边界、状态边界、输出边界),但将其转化为工程化的约束描述——使用自然语言定义红线,而非数学公式定义行为。

## 功能:transfer(from_account, to_account, amount)### 前置条件(Preconditions)- [ ] amount > 0 且为整数- [ ] from_account.balance >= amount- [ ] 并发场景下持有 from_account 行级锁### 不变式(Invariants)- [ ] 系统总资金守恒(sum(all accounts.balance) 恒定)- [ ] 账户余额永不为负### 后置条件(Postconditions)- [ ] from_account.balance' = 原余额 - amount- [ ] transaction_log 新增记录(含 timestamp, tx_id)### 异常约束(Error Constraints)- [ ] 前置条件失败时抛 BusinessException,双方余额不变- [ ] 错误信息不得暴露账户是否存在(防枚举攻击)### 性能禁区(Performance Constraints)- [ ] 禁止全表扫描(必须使用索引)- [ ] 必须在 200ms 内完成(含网络往返)

关键机制:在 Prompt 中采用"约束优先模式"——先粘贴约束清单,再要求 AI 基于约束实现。若代码逻辑可能违反任何一条硬约束,必须显式拒绝执行或抛出异常。

注意:此处使用的"约束"(Constraint)指防御性约定(Defensive Constraint Agreement),不同于 Bertrand Meyer 的 Design by Contract 形式化契约——后者要求严格的数学断言和完备性,前者允许清单式、可迭代的边界描述。


组织采纳:存量系统与团队迁移路径

对于已迭代多年的遗留系统,直接推行 CDAC 不现实。我们建议采用"约束考古学"(Constraint Archaeology)策略:

阶段一:约束提取(逆向工程)

指挥 AI 分析现有代码库(OrderService, PaymentService 等),提取:

  1. 功能约束:隐含的参数校验、状态检查
  2. 业务不变式:数据一致性规则、资金守恒等业务铁律
  3. 状态机约束:订单从创建到完成的合法状态转换路径
  4. 债务标记:TODO、FIXME、hardcode 的业务规则

特别注意:找出那些"代码没写但业务上必须成立"的隐含约束(如"退款金额绝对不能大于支付金额")。资深工程师需人工审计 AI 提取的约束,修正误读——这是人类架构师不可替代的环节。

阶段二:防腐层建设

不要试图一次性规范整个遗留系统。为新功能/修改模块建立显式约束,与旧代码通过清晰接口隔离。明确告知 AI:"新代码必须满足上述提取的约束,但不得复制旧代码中的以下反模式:[列出具体禁止事项]"

阶段三:分层防御工作流

生产级 AI 编程应该是分层防御的流水线,而非单次对话:

Level 1: 探索(Vibe Coding / 氛围编码)仅限新功能原型,时间盒限制(最多2小时),产出粗糙原型。关键动作:准备重写,不直接用于生产。

→ 转换触发条件:当原型验证通过业务可行性,且决定将该代码保留为生产基线时,必须进入 Level 2。具体指标:

  • 该代码将被其他模块依赖
  • 该功能涉及资金、安全或核心业务流程
  • 原型运行超过 3 天仍未被重写

Level 2: 约束硬化(Constraint Definition)从原型中提取约束清单,补充边界条件、不变式、错误处理约束。明确区分硬约束(必须自动化验证)和软约束(人工 Review 参考)。加入权衡记录:记录为什么选择方案 A 而非 B(性能 vs 成本等)。

Level 3: 约束生成(Implementation)基于约束清单让 AI 重新生成生产级代码,使用"约束优先 Prompt"。要求 AI 生成代码时引用约束编号(如"// 满足约束 3.2:事务原子性")。

Level 4: 自动化验证(对抗性检查)将约束清单转化为:

  • 运行时断言(Runtime Assertions):关键硬约束(如资金守恒)实时校验
  • 对抗性测试(Adversarial Testing):使用 Fuzzing 工具或让另一个 AI 尝试突破约束,发现漏洞后反馈约束清单
  • 禁区扫描(Linting):静态检查是否触碰代码红线(如 SQL 拼接、硬编码密钥)

注:CDAC 不追求形式化证明,而是通过"约束-测试-修补"的对抗循环逼近安全边界。

建立 CI 门禁:不满足硬约束的提交自动阻断。

Level 5: 文档同步(Documentation)将最终约束同步到 API 文档和团队 Wiki,作为后续 AI 编程的上下文锚点。


工程师的角色升维:从编码者到约束建筑师

AI 不会取代工程师,但会用 AI 的工程师会取代不会用的。2026年的核心竞争力不是"写代码的速度",而是"定义什么是正确代码"的能力。

核心能力转变:

  • 从"写代码"到"设计约束":Prompt 不是咒语,而是工程约束的草稿;你的价值在于识别"哪些边界绝对不能被突破"
  • 从"实现细节"到"全局架构":AI 负责局部最优,人类负责全局最优与多维度权衡
  • 从"打字速度"到"对抗性思维":像 Red Team 一样思考——AI 会怎么绕过我的约束?如何设计更严密的防御?
  • 从"单打独斗"到"管理 AI Agent 团队":主导并管理 AI 智能体的工作流程,成为"AI 团队的技术负责人"

正如 Grady Booch 所言:真正的基础是系统理论、复杂性管理。如果你具备在规模化条件下管理复杂性的能力,既知道如何处理技术因素,也能处理人的因素,那么你的工作不仅不会消失,反而会变得更加重要。


结语:范式未死,只是迁移

软件工程的演进一直是把机械劳动交给机器,让人去处理更复杂的抽象层。从汇编到高级语言,从物理服务器到云,再到今天的 AI,这个逻辑没有变。

AI 并没有让工程师变得可有可无,它只是重新标定了"值钱的能力"在哪里。当写出能跑的代码变得稀疏平常,区分"能跑"和"跑得好"、识别架构隐患、把控技术债务的重要性反而在上升。

真正有效的人机协作,是把 AI 当作能力放大的杠杆,而非替代思考的捷径。这意味着我们必须成为更挑剔的代码审阅者、更严谨的架构师,而不是做 AI 输出的被动接受者。

未来的竞争力在于工程判断力,而非代码产量。适应这种转变,比怀念过时的工作方式更有意义。

约束驱动不是一种工具,而是一种治理哲学——在 AI 生成代码之前,我们就已经定义了什么是不可逾越的红线。这,才是软件工程在 AI 时代的生存之道。


思考彩蛋:我们真的需要看懂 AI 写的代码吗?

行文至此,忽然想到之前思考过的一个问题:我们真的需要看懂 AI 写的代码吗? 同样,我们还是先来看看历史的发展轨迹:

  • 机器码时代 → 汇编语言出现,程序员不再需要数着 01011001 调试,只需理解寄存器和跳转指令;
  • 汇编时代 → C/Java 出现,程序员不再需要手写 MOV AX, BX,只需理解变量和循环;
  • 今天 → AI Coding 出现,我们是否只需要理解自然语言描述的业务需求,而无需看懂生成的具体代码?

如果这个逻辑成立,那么 CDAC(约束驱动)中的"约束"也应该交给 AI 自动生成,人类只需做纯粹的需求翻译

但这里隐藏着一个危险的类比跳跃

抽象泄漏定律

Joel Spolsky 提出的定律指出:所有非平凡的抽象,在某种条件下都会泄漏。汇编隐藏了机器码,但当你遇到段错误(Segmentation Fault)时,必须理解内存地址;高级语言隐藏了汇编,但当你遇到性能瓶颈时,必须理解 CPU 缓存行。

AI 生成的代码是最厚的抽象层——它连"逻辑是如何被实现的"都隐藏了。当一切正常时,你确实可以把它当作黑盒;但当出现以下情况时,抽象必然泄漏

  1. 约束被突破:AI 生成了"看起来对"但违反隐藏约束的代码(如用浮点数做货币计算);
  2. 边界条件触发:生产环境出现罕见输入组合(Edge Case),AI 生成的默认处理逻辑崩溃;
  3. 技术债务累积:AI 在多次对话中生成的代码风格不一致,导致隐式耦合。

在这些时刻,如果你看不懂代码,你就无法定位是约束定义错了,还是 AI 实现偏了

分层理解:从"语法"到"约束"

我们不需要像审查人类代码那样逐行理解 AI 的"编码风格",但我们需要在三个层面保持可读性(Legibility)

Level 1: 语法层(可放弃)你不需要理解 AI 用的是 for 循环还是 Stream.map(),不需要关心变量命名是驼峰还是下划线。这是纯粹的实现细节。

Level 2: 语义层(部分放弃)你不需要逐行跟踪业务逻辑,但需要理解关键路径——资金流转、状态转换、权限判断等核心语义。这类似于你不需要看懂汇编,但需要理解 C 代码的关键算法逻辑。

Level 3: 约束层(必须掌握)这是 CDAC 的核心论点:你必须看懂约束是否被正确表达。即使 AI 生成了 1000 行代码,你也需要快速验证:

  • 事务边界是否包裹了关键操作?
  • 错误处理是否泄露了敏感信息?
  • 并发控制是否持有正确的锁粒度?

看不懂代码,你就无法验证约束;看不懂约束,CDAC 就退化为"用自然语言祈祷"。

历史类比的真相

回看历史,每一次抽象层跃迁,被消灭的不是"理解",而是"特定细节的记忆"

  • 汇编程序员不需要背机器码表,但必须理解指令流水线
  • Java 程序员不需要记寄存器分配,但必须理解垃圾回收对内存模型的影响
  • AI 时代的工程师不需要看每一行实现,但必须理解约束在代码中的映射关系

新的抽象层增加的是"表达力",减少的是"机械记忆",但从未减少"对边界的敬畏"

结论:看不懂的约束,等于没有约束

如果你完全看不懂 AI 写的代码,你只能做需求翻译(Product Manager 的工作),不能做工程治理(Engineering 的工作)。

CDAC 中的"约束建筑师"角色,要求你看得懂以足以审查约束是否被遵守——你不需要是编译器专家,但必须能识别"这段代码是否违反了不变式"。

也许未来会出现"AI 解释 AI"的中间层(让另一个 AI 用自然语言解释代码如何满足约束),但在那之前,人类仍然是约束正确性的最终仲裁者

所以,回答标题的问题:

我们不需要看懂每一行 AI 写的代码,就像我们不需要看懂编译器生成的汇编。但我们需要看懂足够多,以确保约束被正确实现——因为当抽象泄漏时,唯一能修复约束的,仍然是人类工程师。


*彩蛋思考题:如果某天 AI 不仅能写代码,还能自动发现并修复约束漏洞,CDAC 中的"人类约束建筑师"角色是否会消失?还是说,那时的约束将上升到更高维度——定义"什么是业务价值"而非"什么是系统安全"?

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