乐于分享
好东西不私藏

【OpenClaw 进阶实战系列四】 Hooks 完整指南:事件驱动自动化的设计模式与实战案例

【OpenClaw 进阶实战系列四】 Hooks 完整指南:事件驱动自动化的设计模式与实战案例

OpenClaw Hooks 完整指南:事件驱动自动化的设计模式与实战案例

当企业开始认真考虑将 AI Agent(智能代理)部署到生产环境时,一个核心的工程问题往往会浮出水面:如何让 AI 代理真正无缝融入现有的工程文化与运维体系? OpenClaw 给出的答案是 Hooks —— 一套以“事件驱动”为核心的自动化框架。

本文将深入剖析 Hooks 系统的设计哲学、底层技术细节,并提供六个完整的企业级实战案例。无论你是想优化现有的 CI/CD 流程、建立即时告警系统,还是打造全自动的数据报表管线,本文都将为你提供可直接落地的最佳实践。

一、从轮询到事件驱动:AI 代理自动化的范式转移

1.1 轮询(Polling)模型的根本缺陷

在 Hooks 系统出现之前,大多数 AI 代理框架采用的是轮询模型:代理程序每隔固定时间(例如每秒、每五秒)向各个消息渠道发送请求,查询是否有新事件需要处理。这种设计虽然简单直观,但存在三个致命缺陷:

  1. 极大的资源浪费:无论是否有新事件,轮询请求都会白白消耗 CPU 周期与网络带宽。在多代理环境中,假设有 10 个代理各自以 1 秒间隔轮询 5 个渠道,每分钟将产生 3,000 次空请求——绝大多数毫无意义。
  2. 延迟不可控:轮询的间隔决定了系统的最大响应延迟。若设定为 5 秒,那么一个紧急的线上告警最坏情况下需要等待近 5 秒才能被处理。对于金融交易、安全告警等对时效极其敏感的场景,这是不可接受的。
  3. 扩展性瓶颈:随着代理数量与监控渠道的增加,轮询请求会呈线性甚至指数级增长,最终压垮后端的 API 服务。

1.2 事件驱动(EDA)的架构优势

事件驱动架构(Event-Driven Architecture, EDA)彻底颠覆了上述逻辑:系统不再主动询问“有没有新事件?”,而是当事件真正发生时,主动通知所有订阅者。正如 Martin Fowler 所言,这是从“命令式”到“响应式”的思维转换。

采用事件驱动架构能够实现三个关键的工程目标:

  • 解耦:事件的生产者与消费者无需直接依赖。
  • 弹性:消费者(各个 Hook)可以独立进行扩展。
  • 实时性:事件能够在毫秒级别传递给所有订阅者。

OpenClaw 的 Hooks 系统正是将这套成熟的企业级架构思想带入了 AI 代理领域,让其从简单的“对话工具”蜕变为强大的“企业级自动化平台”。

1.3 量化对比:轮询 vs. 事件驱动

以下数据来自一个典型的企业部署场景(10 个代理,监控 8 个渠道,每日真实事件量约 2,000 次):

性能指标
轮询模型(5秒间隔)
OpenClaw Hooks (事件驱动)
性能改善幅度
每日空请求数
1,382,400 次
0 次
 (仅响应真实事件)
-100%
平均事件响应延迟
2,500 ms
18 ms-99.28%
闲置期 CPU 占用
12–18%
<1%-94%
水平扩展成本
O(n × m)
O(n + m)线性 -> 次线性

(n = 代理数量,m = 监控渠道数量)


二、OpenClaw Hooks 架构深度解析

2.1 整体架构概览

OpenClaw Hooks 系统由三个核心组件构成:

  1. 事件生产者(Event Producers):散布在 OpenClaw 的各个子系统中。当用户发送消息、代理完成任务或技能被调用时,对应子系统会生成一个标准化的 JSON 事件对象,并推送至 Gateway。
  2. Gateway 事件总线(Event Bus):运行于本地的 WebSocket 端点 ws://127.0.0.1:18789。它采用非阻塞的异步模型,负责接收所有事件、根据路由表进行匹配,并分发给订阅该事件的 Hook,确保高并发下不会造成队列积压。
  3. Hook 执行引擎(Hook Executor):在隔离的沙箱(Sandbox)环境中执行对应的 Node.js Hook 脚本,捕获执行结果与异常,并记录完整的审计日志。

2.2 Hook 的生命周期

每个 Hook 从事件触发到执行完毕,会经历严格的生命周期:

  1. 事件生成:子系统生成包含 typetimestamppayload 的标准 JSON 对象。
  2. Gateway 路由:查询路由表,找出所有订阅该事件类型的 Hook。
  3. 过滤评估(Filter):评估 Hook 定义的过滤规则,不符合的事件直接丢弃,不消耗计算资源。
  4. 沙箱初始化:为 Hook 分配独立的 Node.js 进程沙箱,注入环境变量与权限 Token。
  5. 执行逻辑:在沙箱中调用 Hook 的 handler 函数。
  6. 结果回传与审计:捕获执行结果(成功/失败/返回值)并写入日志。
  7. 资源清理:释放沙箱内存,确保不同 Hook 之间实现 100% 隔离。

2.3 与 Cron 定时任务及传统 Webhook 的本质区别

  • 与 Cron 的区别:Cron 是基于时间盲目触发的。而 OpenClaw Hooks 可通过对外暴露的 /hooks/wake 端点结合系统 Cron 使用,同时它拥有 OpenClaw 的代理上下文,可以直接操作 AI 代理。
  • 与传统 Webhook 的区别:传统 Webhook 需要你维护一个公网可达的 HTTP 服务器,处理 SSL/TLS 和签名验证。OpenClaw Hooks 运行在本地 Gateway,无需公网暴露,且天然集成了系统的身份认证体系。

三、启用与基础配置

3.1 前置条件检查

作为 Node.js 开发者,启用前请确保环境满足要求:

  • OpenClaw 版本 ≥ 2026.1.0
  • Node.js 环境 ≥ v22.x (Hook 脚本的高级异步特性依赖于此)
  • 本地 Gateway 已启动

检查 Gateway 状态:

openclaw gateway status# 预期终端输出:# Gateway Status: Running# WebSocket: ws://127.0.0.1:18789# Connected Agents: 2# Active Hooks: 0

3.2 启用 Hooks 系统

全局启用(推荐做法):

openclaw hooks enable

注:此命令会热修改全局配置 ~/.openclaw/openclaw.json,无需重启服务即可生效。

3.3 目录结构与配置文件

OpenClaw 采用类似 Next.js 的基于文件系统的自动发现机制。每个 Hook 是一个独立目录,包含元数据 HOOK.md 与处理逻辑 handler.ts

project/hooks/├── task-notifier/│   ├── HOOK.md            # YAML 元数据定义(权限、订阅事件)│   └── handler.ts         # TypeScript/Node.js 处理逻辑

HOOK.md 示例(YAML Front Matter):

---name:task-notifierdescription:"当指令完成时发送 Slack 通知"metadata:openclaw:events:["command:new","command:stop"]# 订阅的事件类型export:"default"requires:bins:["node"]# 依赖的系统二进制环境env:["SLACK_WEBHOOK_URL"]# 启动该 hook 必须具备的环境变量,缺少则拒绝加载always:false---

对应的 handler.ts 示例:

// hooks/task-notifier/handler.ts/** * 默认导出的异步处理函数 * @param {Object} event - 包含触发上下文的标准化事件对象 */exportdefaultasyncfunctionhandler(event{// 提前返回 (Early return) 模式:过滤掉不需要的 action,提升性能if (event.action !== "stop"return;// 从环境变量中安全读取 Webhook URLconst webhookUrl = process.env.SLACK_WEBHOOK_URL;// 使用原生的 fetch API 发送 HTTP 请求try {await fetch(webhookUrl, {      method: "POST",      headers: { "Content-Type""application/json" },      body: JSON.stringify({        text: `✅ 指令已完成 — 会话 ID: ${event.sessionKey}`,      }),    });  } catch (error) {// 良好的错误捕获习惯console.error("Slack 通知发送失败:", error);  }}

四、内置 Hook 事件一览

OpenClaw 提供了丰富的内置事件,事件名称统一使用冒号分隔(如 command:new):

4.1 指令类事件(Command Events)

事件名称
触发时机
核心 Context 字段
command:new
代理收到新指令时
sessionId
workspaceDir
command:reset
会话被重置时
sessionId
sessionFile
command:stop
指令执行完成/停止时
sessionId
commandSource

4.2 消息类事件(Message Events)

事件名称
触发时机
核心 Context 字段
message:received
代理接收到任何新消息
from
contentchannelId
message:sent
代理成功发送消息后
to
contentsuccess

五、自定义 Hook 编写指南

5.1 与代理交互的两种模式

Hook 与代理的交互通常分为间接驱动直接副作用两种:

// hooks/smart-responder/handler.tsexportdefaultasyncfunctionhandler(event{const { type, action, context, messages } = event;if (type !== "message" || action !== "received"return;// 模式一:向 messages 数组 push 文本。// 这会将消息注入代理的上下文中,引导代理执行后续 AI 分析。if (context.content.includes("urgent")) {    messages.push(`系统提示:这是一条紧急消息,请立即分析并生成回复方案。内容:${context.content}`);  }// 模式二:直接执行 Node.js 副作用(Side Effect)// 绕过代理,直接由底层 Node.js 进程执行数据库写入或 API 调用。await myDatabase.insert({ log: context.content });}

5.2 生产环境的容错与重试机制

在生产环境中,网络抖动是常态。我们需要编写具有韧性(Resilience)的代码:

// hooks/resilient-hook/handler.tsexportdefaultasyncfunctionhandler(event{try {// 封装带有超时控制的异步操作const result = await riskyOperation(event.context);console.log("Hook 执行成功", { sessionKey: event.sessionKey });  } catch (error) {// 记录详细的错误日志供排查console.error("Hook 执行失败:", {      message: error.message,      code: error.code,type`${event.type}:${event.action}`,    });// 如果重新抛出错误 (throw error),Hook 引擎会捕获并可能触发重试策略// 如果静默处理 (不 throw),则视为流程终结  }}asyncfunctionriskyOperation(context{// 最佳实践:使用 AbortSignal 防止由于外部 API 挂起导致 Hook 沙箱资源耗尽const response = await fetch("https://api.example.com/data", {    method: "POST",    headers: { "Content-Type""application/json" },    body: JSON.stringify({ session: context.sessionId }),    signal: AbortSignal.timeout(5000), // 严格的 5 秒超时控制  });if (!response.ok) thrownewError(`HTTP Error: ${response.status}`);return response.json();}

六、实战案例一:CI/CD Pipeline 自动化

6.1 场景描述

当 GitHub Pull Request 被合并时,自动唤醒 OpenClaw 代理执行拉取代码、构建、测试与部署流程,并将结果推送到 Slack。

6.2 代码实现

首先,在全局配置 openclaw.json 中映射 GitHub Webhook:

// ~/.openclaw/openclaw.json{  hooks: {    enabled: true,    token: "${GITHUB_WEBHOOK_SECRET}",    mappings: [      {        match: { path: "github" }, // 匹配 /hooks/github 端点        action: "agent",        agentId: "main",        wakeMode: "now",        // 使用模板引擎解析 GitHub Payload        messageTemplate: "GitHub PR #{{body.pull_request.number}} ({{body.action}}): {{body.pull_request.title}}",      },    ],  },}

编写 Hook 引导代理执行 CI/CD:

// hooks/github-pr-deploy/handler.tsexportdefaultasyncfunctionhandler(event{if (event.action !== "received"return;const { content, channelId } = event.context;// 严格过滤:只处理来自 GitHub 渠道的消息if (!channelId?.startsWith("hook:github")) return;// 推送 Prompt 给 AI 代理,指示其接管服务器终端执行后续操作  event.messages.push(`收到 GitHub PR 合并通知。请接管终端并执行以下 CI/CD 流程:1. git pull origin main2. npm ci3. npm run test4. npm run build5. 验证构建产物并部署`.trim(),  );}

七、实战案例二:企业自动化报表系统

7.1 场景描述

利用外部 Cron 触发 OpenClaw Webhook,代理整合多系统数据后,通过 Hook 使用 Node.js 原生的 nodemailer 发送邮件。

7.2 代码实现

// hooks/report-notifier/handler.tsimport { createTransport } from"nodemailer";exportdefaultasyncfunctionhandler(event{if (event.action !== "stop" || !event.sessionKey?.includes("report")) return;// 格式化当前日期const dateStr = newDate().toLocaleDateString("zh-CN", {    year: "numeric",    month: "long",    day: "numeric",  });// 初始化 SMTP 客户端const transporter = createTransport({    host: process.env.SMTP_HOST,    port: 465,    secure: true// 生产环境强烈建议开启 SSL/TLS    auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS },  });// 发送邮件await transporter.sendMail({from'"AI 报表系统" <bot@company.com>',    to: "management@company.com",    subject: `【日报】${dateStr} 业务摘要已生成`,    text: `今日业务日报已由 AI 代理自动生成。\n会话跟踪 ID: ${event.sessionKey}`,  });}

八、实战案例三:即时异常检测与告警

8.1 场景描述

实时监控代理处理日志,一旦发现内存溢出(OOM)或严重超时,立即并发通知 Slack 与 PagerDuty。

8.2 代码实现

// hooks/critical-alert/handler.tsexportdefaultasyncfunctionhandler(event{if (event.action !== "received"return;const { content, channelId } = event.context;if (!content) return;// 定义严重错误特征库const criticalPatterns = ["CRITICAL""FATAL""OOM""503""TIMEOUT"];const isCritical = criticalPatterns.some((p) => content.toUpperCase().includes(p));if (!isCritical) return;// Node.js 性能优化:使用 Promise.allSettled 并发触发告警,避免阻塞// 即使某一个告警渠道失败,也不会影响其他渠道awaitPromise.allSettled([sendSlackAlert(content, channelId), sendPagerDutyAlert(content, channelId)]);// 要求 AI 代理立刻进行系统状态排查  event.messages.push(`系统出现严重异常,请立即执行 'pm2 logs' 和 'top' 命令收集当前系统状态并总结报错原因。`);}// (sendSlackAlert 和 sendPagerDutyAlert 的具体 HTTP 请求实现略)

九、性能优化与 Node.js 最佳实践

9.1 防抖与节流(Debounce / Throttle)

在高频事件下(如大量消息涌入),直接触发外部 API 极易被限流。作为 Node.js 开发者,我们需要在 Hook 中实现缓冲机制。

注意:以下示例使用文件系统作为跨进程的状态存储。在极高并发的生产环境中,建议替换为 Redis 等内存数据库。

// hooks/debounced-aggregator/handler.tsimport { readFileSync, writeFileSync, existsSync } from"fs";const BATCH_FILE = "/tmp/openclaw-hook-batch.json";const WINDOW_MS = 10000// 10秒的时间窗口exportdefaultasyncfunctionhandler(event{if (event.action !== "received"return;let batch = [];if (existsSync(BATCH_FILE)) {    batch = JSON.parse(readFileSync(BATCH_FILE, "utf-8"));  }// 收集精简后的 payload  batch.push({    timestamp: Date.now(),    sessionKey: event.sessionKey,  });const firstTimestamp = batch[0]?.timestamp || Date.now();// 如果还在 10 秒的防抖窗口期内,仅写入文件并直接返回if (Date.now() - firstTimestamp < WINDOW_MS) {    writeFileSync(BATCH_FILE, JSON.stringify(batch));return;  }// 窗口期结束,执行批量处理逻辑await sendBatchNotification(batch.length);// 处理完毕后清空缓冲区  writeFileSync(BATCH_FILE, "[]");}

9.2 保证 Hook 的幂等性(Idempotency)

在微服务或事件驱动架构中,由于网络重试等原因,同一个事件可能会被传递多次。Hook 的逻辑必须是幂等的(即执行一次与执行多次的效果相同)。

// hooks/idempotent-hook/handler.tsimport { existsSync, writeFileSync } from"fs";import { join } from"path";const PROCESSED_DIR = "/tmp/openclaw-hook-processed";exportdefaultasyncfunctionhandler(event{if (event.action !== "stop"return;// 提取唯一标识符构建幂等键 (Idempotency Key)const idempotencyKey = `${event.sessionKey}-${event.timestamp.toISOString().slice(010)}`;const lockFile = join(PROCESSED_DIR, `${idempotencyKey}.lock`);// 检查锁文件:如果存在,说明该事件已被处理过,直接返回if (existsSync(lockFile)) {console.log("事件已处理,跳过重复执行");return;  }// 执行真实业务逻辑...await performNotification(event);// 成功后写入锁文件,防止后续的重复处理  writeFileSync(lockFile, JSON.stringify({ processed_at: newDate().toISOString() }));}

十、安全考量与风险管控

AI 代理具备执行系统操作的能力,因此其 Hook 机制的安全性至关重要。主要防范对象包括事件 Payload 注入攻击以及供应链污染

10.1 沙箱隔离与净化(Sanitization)

永远不要信任来自事件上下文(Context)中的外部数据,在将其传递给底层 API 或系统命令前,必须进行净化:

// hooks/secure-hook/handler.tsexportdefaultasyncfunctionhandler(event{// 1. 验证对象结构的完整性if (!event.context || typeof event.context !== "object"return;// 2. 净化输入:防范 Shell 命令注入const safeContent = sanitizeString(event.context.content);// 3. 避免在日志中意外打印 token 或敏感密钥console.log("正在处理事件", { sessionKey: event.sessionKey });}functionsanitizeString(input{if (typeof input !== "string"return"";// 使用正则剔除潜在的 Shell 元字符 (如 ; | ` $ > <)return input.replace(/[;&|`$(){}[\]<>]/g"").substring(0255);}

10.2 依赖包的安全管理

在使用 openclaw hooks install 安装社区 Hook 时,底层默认通过 npm install --ignore-scripts 运行,这极大地阻止了恶意包在 postinstall 阶段执行恶意代码。

作为最佳实践,请将其集成到你的 CI 流水线中:

# 在 CI/CD 中加入依赖漏洞扫描npm audit --audit-level=high

结语

OpenClaw Hooks 系统不仅仅是一个技术特性,更是将 AI 代理融入企业级生产环境的桥梁。通过零轮询的事件驱动架构,Hooks 将 AI 代理从被动的“问答机器人”转变为主动的“响应式自动化中心”。

无论你是资深的 Node.js 开发者还是 DevOps 工程师,Hooks 系统的学习曲线都非常平缓。建议大家从一个低风险的日志记录 Hook 开始,逐步建立信心,最终构建出能够为你省下海量时间的企业级自动化流

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-03 13:29:17 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/497853.html
  2. 运行时间 : 0.130240s [ 吞吐率:7.68req/s ] 内存消耗:4,752.01kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6b8f545bac3eb0234a412a638649658f
  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.000576s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000820s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000310s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000297s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000502s ]
  6. SELECT * FROM `set` [ RunTime:0.000198s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000591s ]
  8. SELECT * FROM `article` WHERE `id` = 497853 LIMIT 1 [ RunTime:0.001304s ]
  9. UPDATE `article` SET `lasttime` = 1775194157 WHERE `id` = 497853 [ RunTime:0.012420s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.001180s ]
  11. SELECT * FROM `article` WHERE `id` < 497853 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000497s ]
  12. SELECT * FROM `article` WHERE `id` > 497853 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001662s ]
  13. SELECT * FROM `article` WHERE `id` < 497853 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001638s ]
  14. SELECT * FROM `article` WHERE `id` < 497853 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001814s ]
  15. SELECT * FROM `article` WHERE `id` < 497853 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.016641s ]
0.131951s