乐于分享
好东西不私藏

AI 编程工具的 Hooks 应用

AI 编程工具的 Hooks 应用

用 AI 编程工具时有一个常见场景:Agent 在自动重构中执行了一条你意料之外的重命名命令——没有造成灾难,但打乱了本地分支历史,需要花时间回滚。问题出在你没有在 Agent 执行这条命令之前检查它的机会。

事后纠正 Agent 的成本很高——命令已执行、文件已覆写、代码已推送,通常需要回滚或手动修复。Agent 在自主执行链条中缺少一个在关键节点被拦截和引导的机制。Hooks 允许你在 Agent 即将做某事、刚做完某事、或者会话状态发生变化时,插入你自己的逻辑。

我们在本文中把 Hooks 的使用拆成五个问题:它承担哪几种工程角色?主流的 AI 编程工具分别在哪些事件节点触发?五个最值得配置的实战场景怎么落地?效果怎么衡量?不同工具之间怎么选?

Hooks 在 Agent 的自主执行环中插入同步点,允许你在工具调用前后、用户交互时、会话状态变化时检视上下文、做出决策或改变行为。每个 Hook 本质上是一个提前声明的介入点。

一、Hooks 的四种工程角色

把不同工具的 Hooks 事件归拢来看,Hooks 在工程实践中承担四种互不重叠的角色。理解这四种角色是选择"在哪个节点挂什么逻辑"的基础。

角色
解决的问题
典型触发节点
你的脚本做什么
安全门
Agent 执行命令前拦住不该做的事
PreToolUse、pre_run_command、pre_write_code
检查命令/文件/参数是否匹配黑名单或白名单;匹配则返回 exit code 2 阻止执行
自动验证
Agent 改完代码后自动跑检查
PostToolUse、post_write_code、PostToolBatch
拿到变更文件路径,触发 linter、formatter、type check 或单元测试
通知触达
Agent 完成阶段性工作后让你知道
Stop、SubagentStop、Notification、SessionEnd
推送桌面通知、发消息到 IM、写日志到审计系统
上下文注入
Agent 启动或被重置时自动加载项目约定
SessionStart、Setup、UserPromptSubmit
动态读取环境变量、注入临时凭据、根据当前分支或目录加载不同的规则文件

四种角色覆盖了 Agent 执行链路中所有"人不盯着就不放心"的环节。安全门是执行前拦截,自动验证是执行后把关,通知触达是结果同步给人,上下文注入是启动时武装 Agent。

需要注意的是,不是每个场景都需要四种角色全上。一个项目的 Hooks 配置通常从安全门 + 一个最痛的自动验证开始,然后随使用频率增长逐步补全。

二、事件节点全景:主流工具各在哪些时刻触发

不同工具的 Hooks 事件命名和粒度不同,但都分布在同一条时间轴上:会话启动 → 用户输入 → 工具调用(前后)→ Agent 停止。下面以 Claude Code(30+ 事件,覆盖面最广)和 Windsurf(12 事件,企业场景最完整)为代表,给出事件节点的完整地图。

Claude Code 的事件时间轴

阶段
事件
触发时机
能否阻止操作
会话层
SessionStart
会话启动或恢复时
可注入环境变量
Setup
CI/脚本模式下一次性的初始化
可阻止继续
SessionEnd
会话终止时
不可阻止
交互层
UserPromptSubmit
用户提交 prompt 后、Agent 处理前
可阻止
PermissionRequest
权限弹窗出现时
可自动批准/拒绝
Notification
系统通知发送时
不可阻止
工具调用层
PreToolUse
每次工具调用之前
可阻止(exit 2)
PostToolUse
工具调用成功后
不可阻止,可注入上下文
PostToolUseFailure
工具调用失败后
不可阻止
PostToolBatch
批量并行工具调用全部完成后
不可阻止
PermissionDenied
自动模式拒绝某工具调用时
可要求重试
决策层
Stop
Agent 完成一轮响应后
可阻止停止,要求继续
PreCompact
上下文压缩前
可注入"压缩时保留"的信息
文件/环境
FileChanged
被监听的文件发生变化时
不可阻止
CwdChanged
工作目录改变时
不可阻止

Windsurf 的事件模型更精简,聚焦于文件和命令操作的前后六个核心节点:pre_read_code、post_read_code、pre_write_code、post_write_code、pre_run_command、post_run_command,外加 pre_user_prompt、post_cascade_response、post_setup_worktree。再加上 pre_mcp_tool_use / post_mcp_tool_use,共 12 个事件。

Cursor 和 Continue 则走"规则注入"路线而不是完整的事件钩子系统。Cursor 的 Hooks 文档目前只有 pre/post 两端,主力机制是 .cursor/rules/*.mdc 规则文件——通过 globs 匹配决定哪些文件被编辑时注入哪条规则。Continue 的 Rules 同理,是 Markdown 指令注入系统消息,可以按 Hub 共享、workspace 本地或 global 全局三层组织。Aider 则最轻量:一个 CONVENTIONS.md 文件加上 /read 命令手动加载。

从工程完备度看,Claude Code 的事件覆盖最全面:从会话生命周期到工具调用到文件变更都能挂 Hook。Windsurf 次之,但它的跨平台 command/powershell 双命令设计和 MDM 企业部署能力在团队场景中更实用。

三、五个实战场景拆解

下面是五个覆盖四种工程角色的实战场景。每个场景都包含具体配置示例和效果判定标准。示例以 Claude Code 的 JSON 配置格式为主(它的事件模型最完整),同时附注其他工具的对等实现方式。

场景一:拦截高危命令(安全门)

这个场景解决什么:

Agent 在自主模式下调 Bash 执行了 rm -rfgit push --forceDROP TABLE 等不可逆操作。你事后才知道。

触发节点:

PreToolUse,matcher 设为 Bash,用 if 字段精确到子命令模式。

配置:

// .claude/settings.json

{

"hooks": {

"PreToolUse": [

{

"matcher": "Bash",

"hooks": [

{

"type": "command",

"if": "Bash(rm -rf *)",

"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-destructive.sh"

},

{

"type": "command",

"if": "Bash(git push --force *)",

"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-force-push.sh"

}

]

}

]

}

}

Hook 脚本逻辑(block-destructive.sh):

#!/bin/bash

COMMAND=$(jq -r '.tool_input.command')

if echo "$COMMAND" | grep -qE 'rm\s+-rf'; then

jq -n '{

hookSpecificOutput: {

hookEventName: "PreToolUse",

permissionDecision: "deny",

permissionDecisionReason: "rm -rf blocked by hook"

}

}'

else

exit 0

fi

对等实现:

Windsurf:用 pre_run_command,脚本 exit 2 即阻止。

Cursor/Continue/Aider:缺少 PreToolUse 级别的拦截机制——只能通过规则注入降低 Agent 调用危险命令的概率,无法在运行时拦截。

如何确认效果:

计数:Hook 脚本里加一行 echo "$(date) blocked: $COMMAND" >> ~/.claude/blocked.log,每周看拦截次数。

零误杀率:如果误杀了合法命令,调整 if 字段的匹配模式——这本身就是 Pitfall 积累。

场景二:代码生成后自动格式化与检查(自动验证)

这个场景解决什么:

Agent 写了一个 Python 文件,缩进用了 3 空格、导入没排序、类型标注缺失。这些不会让代码跑不起来,但会污染后续的 diff 和 review。

触发节点:

PostToolUse,matcher 设为 Write|Edit。更精准的做法是用 if 字段限制文件类型:Edit(*.py)

配置:

{

"hooks": {

"PostToolUse": [

{

"matcher": "Write|Edit",

"hooks": [

{

"type": "command",

"if": "Edit(*.py)",

"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format-and-lint.sh"

}

]

}

]

}

}

format-and-lint.sh 逻辑:

#!/bin/bash

FILE=$(jq -r '.tool_input.file_path')

ruff format "$FILE" --quiet

ruff check "$FILE" --fix --quiet

# 把检查结果注入 Claude 的上下文

RESULT=$(mypy "$FILE" 2>&1 || true)

if [ -n "$RESULT" ]; then

jq -n --arg msg "$RESULT" '{

systemMessage: ("Type check issues found: " + $msg)

}'

fi

对等实现:

Windsurf:post_write_code,从 tool_info.file_path 拿路径。

没有 PostToolUse 级别 Hook 的工具:把 formatter 配成 pre-commit hook,Agent 的修改在 git commit 时被格式化。效果延迟到 commit 阶段,但至少不会漏掉。

如何确认效果:

格式化触发次数 vs diff 噪音:如果 Hook 后的代码不再出现"全文件重格式化"的大 diff,说明起作用了。

类型错误发现率:Hook 注入到 Agent 上下文的 mypy 错误,观察 Agent 是否在下一次工具调用中修复了这些错误。

场景三:会话启动时注入动态上下文(上下文注入)

这个场景解决什么:

你每次开新会话都要手动告诉 Agent:"当前在 feature/xxx 分支,依赖刚更新过,环境变量变了",或者更糟——你忘了说,Agent 按旧环境执行。

触发节点:

SessionStart,可以按启动原因(startup / resume / clear / compact)匹配不同行为。

配置:

{

"hooks": {

"SessionStart": [

{

"matcher": "startup",

"hooks": [

{

"type": "command",

"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/inject-context.sh"

}

]

}

]

}

}

inject-context.sh 逻辑:

#!/bin/bash

BRANCH=$(git branch --show-current)

CHANGED=$(git diff --name-only HEAD~5 2>/dev/null | head -20)

jq -n --arg branch "$BRANCH" --arg files "$CHANGED" '{

hookSpecificOutput: {

hookEventName: "SessionStart",

additionalContext: ("Current branch: " + $branch +

" Recently changed files: " + $files)

}

}'

对等实现:

Windsurf:用 pre_user_prompt 在每次用户输入前注入,粒度更细。

Cursor:用 .cursor/rules/*.mdc 的 globs 模式,在打开匹配文件时自动注入规则——本质也是上下文注入,但不是"会话启动"的时间点。

Aider:CONVENTIONS.md 会被自动读取,适合静态约定;动态注入需要用户手动 /read

如何确认效果:

减少重复提示:统计"你需要在每次会话开始时向 Agent 重复的环境信息"条数,SessionStart Hook 配好后这个数字应降到 0。

Agent 首次指令准确率:理想情况是 Agent 启动后第一轮就知道当前分支、最近的改动和活跃的环境变量。

场景四:Agent 完成阶段性工作后推送通知(通知触达)

这个场景解决什么:

你把一个长任务丢给 Agent,切到其他窗口做别的事。Agent 跑完了你不知道,回来发现它在等你下一步指令已经等了十分钟。

触发节点:

Stop(一轮响应完成),或者 SubagentStop(子 Agent 完成)。Stop 不支持 matcher,每次 Agent 停止时都会触发。

配置:

{

"hooks": {

"Stop": [

{

"hooks": [

{

"type": "command",

"command": "osascript -e 'display notification \"Claude finished\" with title \"Claude Code\"'"

}

]

}

]

}

}

对等实现:

Windsurf:post_cascade_response,拿 transcript 做更精细的处理。还有个 post_cascade_response_with_transcript 可以把完整对话记录写进日志系统。

没有 Stop 级 Hook 的工具:用外部脚本轮询 Agent 进程状态,或者依赖 IDE 自身的通知系统。

如何确认效果:

响应时间:Agent 停止到用户回来继续交互的时间差。有了通知后这个差应显著缩短。

漏通知率:如果某些 Stop 事件没触发通知(比如 Agent 异常退出),说明需要在 StopFailure 上也挂一条通知。

场景五:文件变更时异步触发测试(自动验证 + 异步)

这个场景解决什么:

Agent 改完代码,你不放心只靠 linter——你希望相关的单元测试自动跑起来。但如果测试要跑 30 秒,你不想每次工具调用都被阻塞。

触发节点:

FileChanged,用 matcher 指定监听的文件模式。配合 async 模式(Claude Code 特有),Hook 在后台运行不阻塞 Agent。

配置:

{

"hooks": {

"FileChanged": [

{

"matcher": "src/**/*.py",

"hooks": [

{

"type": "command",

"command": "pytest tests/ -x --tb=short -q",

"async": true,

"asyncRewake": true,

"statusMessage": "Running tests in background..."

}

]

}

]

}

}

关键设计决策:

async: true 让 Agent 不被阻塞,可以继续下一步操作。

asyncRewake: true 在测试失败时唤醒 Claude,把失败信息注入为系统提醒——Agent 会看到"后台测试失败了"并尝试修复。

statusMessage 在终端显示一个旋转提示,让你知道后台有测试在跑。

并发限制:如果 Agent 连续修改文件,前一个 async Hook 可能还在跑。Claude Code 的 async Hook 会自动管理并发——同一个 handler 只会有一个实例在运行。

如何确认效果:

自动化修复率:asyncRewake 触发后,Agent 是否在下一次工具调用中主动修复了测试失败。

测试覆盖率追踪:FileChanged Hook 触发次数 vs 实际运行的测试数量——如果文件改了但测试没跑,matcher 的模式需要调整。

四、效果衡量:五个可量化的指标

Hooks 不是"配了就完了"的东西。每一次触发都在生成数据,这些数据就是衡量效果的依据。下面是对应四种工程角色的五个可量化指标。

指标
对应角色
怎么算
好的标准
拦截率
安全门
被拦截的危险操作数 / 总工具调用数
拦截率升到稳定值后不再增长(说明规则覆盖完整),同时误杀率保持为零
自动修复率
自动验证
Hook 发现问题后 Agent 在下一次工具调用中修复它的比例
> 70%。低于这个值说明 Hook 注入的信息没有被 Agent 有效利用
首次上下文完整度
上下文注入
新会话中,用户不需要补充环境信息的比例
接近 100%。如果还需要补充,补到 Hook 脚本里而不是发消息告诉 Agent
通知响应延迟
通知触达
Agent 完成工作到用户回来继续交互的平均秒数
小于 30 秒(桌面端通知);如果用户不在电脑前,这个指标不适用——换成通知送达率
Hook 衰减率
全部角色
Hook 因环境变化(工具升级、路径迁移)而静默失效的次数
零。每个 Hook 都应有对应的验证脚本定期运行,失效时主动告警而不是沉默

最后一项"Hook 衰减率"是最容易被忽略但后果最严重的。因为 Hook 是静默运行的——它失败了不会报错,它只是不再生效。你可能会在 Hook 已经失效三个月后才发现。

对抗衰减的方法就是把 Hook 本身的正确性也纳入验证:每月跑一次"Hook 健康检查脚本",模拟每个 Hook 的输入,验证输出是否符合预期。Claude Code 的 /hooks 命令可以查看所有已配置的 Hook 及其来源,这是发现"我以为在运行的 Hook 其实已经被覆盖了"的第一步。

如果你还没配过 Hook,从最担心的一个操作风险点开始——比如一条 PreToolUse Hook 拦截掉所有 rm -rf。配置量很小,但这是最快体会到 Hook 在自动化安全加固方面价值的方式。
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-01 10:18:25 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/692659.html
  2. 运行时间 : 0.112635s [ 吞吐率:8.88req/s ] 内存消耗:4,740.58kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d30f0ae572546ace0d3718be6f1b5eb8
  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.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000568s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000645s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003468s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000287s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000510s ]
  6. SELECT * FROM `set` [ RunTime:0.000698s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000567s ]
  8. SELECT * FROM `article` WHERE `id` = 692659 LIMIT 1 [ RunTime:0.000550s ]
  9. UPDATE `article` SET `lasttime` = 1780280305 WHERE `id` = 692659 [ RunTime:0.004271s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000540s ]
  11. SELECT * FROM `article` WHERE `id` < 692659 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003276s ]
  12. SELECT * FROM `article` WHERE `id` > 692659 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001704s ]
  13. SELECT * FROM `article` WHERE `id` < 692659 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001391s ]
  14. SELECT * FROM `article` WHERE `id` < 692659 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007906s ]
  15. SELECT * FROM `article` WHERE `id` < 692659 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005508s ]
0.114363s