乐于分享
好东西不私藏

OpenClaw 开发系列:第9篇-HTTP 路由与 CLI 扩展 — 构建完整基础设施

OpenClaw 开发系列:第9篇-HTTP 路由与 CLI 扩展 — 构建完整基础设施

前置阅读:第 1 篇 — Plugin SDK 入门 | 第 8 篇 — 运行时 API

本篇讲解 OpenClaw 的基础设施扩展能力:HTTP 路由、Gateway RPC 方法、CLI 子命令和后台服务。这些能力让插件不仅能响应 Agent 的请求,还能暴露 HTTP API、扩展命令行界面、在后台持续运行任务。


01

基础设施注册一览


02

HTTP 路由

基本用法

api.registerHttpRoute 让插件在 OpenClaw Gateway 上注册自定义 HTTP 端点。Gateway 是 OpenClaw 的核心进程(通过 openclaw gateway start 启动),它本身就是一个 HTTP 服务器。通过 registerHttpRoute,你可以在这个服务器上添加自己的路由:

api.registerHttpRoute({  method"GET",  path"/my-plugin/status",  handlerasync (request, response) => {    response.json({      status"ok",      plugin: api.id,      uptime: process.uptime(),    });  },});

注册后,通过 Gateway 的 HTTP 端口访问(默认端口见 openclaw gateway start 的输出):

GET http://localhost:3000/my-plugin/status

路径约定

路径应该以插件的 ID 或功能名称为前缀,避免与其他插件冲突:

// 推荐:使用插件 ID 作为路径前缀api.registerHttpRoute({  path"/my-plugin/...",});// 不推荐:使用通用路径(可能冲突)api.registerHttpRoute({  path"/status",  // 可能与系统路由冲突});

请求与响应

api.registerHttpRoute({  method: "POST",  path: "/my-plugin/webhook",  handler: async (request, response) => {    // 读取请求体    const body = request.body;   // 已解析的 JSON    const headers = request.headers;    const query = request.query; // 查询参数    // 处理逻辑    const result = await processWebhook(body);    // 返回响应    response.json({ success: true, data: result });  },});

实用场景

场景 1:Webhook 接收器

api.registerHttpRoute({  method: "POST",  path: "/github-webhook",  handler: async (request, response) => {    // 验证签名    const signature = request.headers["x-hub-signature-256"];    if (!verifySignature(request.rawBody, signature)) {      response.status(401).json({ error: "Invalid signature" });      return;    }    // 处理 GitHub 事件    const event = request.headers["x-github-event"];    const payload = request.body;    if (event === "pull_request") {      // 触发代码审查流程      await triggerCodeReview(payload);    }    response.json({ received: true });  },});

场景 2:管理 API

api.registerHttpRoute({  method"GET",  path"/my-plugin/config",  handlerasync (request, response) => {    // 返回插件当前配置(脱敏后)    const config = { ...api.pluginConfig };    if(config.apiKey) config.apiKey = "***";    response.json(config);  },});api.registerHttpRoute({  method"PUT",  path"/my-plugin/config",  handlerasync (request, response) => {    // 更新插件配置    const newConfig = request.body;    // 验证并应用新配置    await updatePluginConfig(newConfig);    response.json({ successtrue });  },});

03

Gateway RPC 方法

api.registerGatewayMethod 注册内部 RPC(Remote Procedure Call)远程过程调用方法。你可能好奇:既然有了 HTTP 路由,为什么还需要 RPC?

区别在于:HTTP 路由是给外部系统访问OpenClaw的,而 RPC 方法是给 OpenClaw 内部使用的——走 Gateway 的内部通信协议,不直接暴露为 HTTP 端点。如果你只是需要插件之间互相调用,用 RPC 方法更合适。

##服务端 api.registerGatewayMethod("my-plugin:analyze"async (params) => {  const { text, options } = params;  // 执行分析逻辑  const result = await analyzeText(text, options);  return {    score: result.score,    insights: result.insights,    processedAt: new Date().toISOString(),  };});##OpenClaw内部其它方法-客户端// 在另一个插件中(调用方)const result = await gateway.call("my-plugin:analyze", {  text: "Hello world",  options: { language: "en" }});console.log(result.score); // 输出: 0.95 

注意:

  • 调用方并没有import 那个 analyze 函数。

  • 调用方不知道这个函数运行在哪个进程、哪台机器上。

  • 调用方只是通过一个字符串标识符"my-plugin:analyze" 和参数对象来发起调用。

Gateway 在幕后做了这些事:

  1. 将参数 { text: "...", options: {...} } 序列化(比如 JSON 或 Protobuf)。

  2. 通过网络(或进程间通信)将请求发送到注册了 my-plugin:analyze 的那个插件实例。

  3. 等待响应,反序列化结果,再返回给调用方。

HTTP 路由 vs RPC 方法

选择原则:需要被外部系统访问的用 HTTP 路由;仅供 OpenClaw 内部使用的用 RPC 方法。


04

CLI 子命令

api.registerCli 允许插件扩展 OpenClaw 的命令行界面。注册后,用户可以在终端中直接调用你定义的子命令,就像使用 git 的子命令一样。
api.registerCli(  (cli) => {    cli      .command("my-command")      .description("My plugin command description")      .option("--input <file>""Input file path")      .option("--output <file>""Output file path")      .option("--verbose""Verbose output", { defaultfalse })      .action(async (args) => {        const { input, output, verbose } = args;        console.log(`Processing ${input}...`);        const result = await processFile(input);        if (output) {          await writeFile(output, JSON.stringify(result, null2));          console.log(`Output written to ${output}`);        } else {          console.log(JSON.stringify(result, null2));        }      });  },  {    // 可选配置    name"my-plugin"// 命令命名空间  });

注册后,用户可以通过以下方式调用:

openclaw my-command --input data.json --output result.json --verbose

CLI 注册选项

api.registerCli(registrar, {  name"my-plugin",     // 命令命名空间(可选)  hiddenfalse,         // 是否在帮助中隐藏(默认 false  description"My plugin CLI commands", // 分组描述(可选)});

实用场景

api.registerCli((cli) => {  // 子命令 1:导出数据  cli    .command("export")    .description("Export plugin data")    .option("--format <format>""Output format (json|csv)", { default"json" })    .option("--since <date>""Export data since date")    .action(async (args) => {      const data = await exportData(args.format, args.since);      process.stdout.write(data);    });  // 子命令 2:导入数据  cli    .command("import")    .description("Import data into plugin")    .option("--file <path>""File to import")    .option("--dry-run""Preview changes without applying")    .action(async (args) => {      const result = await importData(args.file, args.dryRun);      console.log(`Imported ${result.count} records`);    });  // 子命令 3:状态检查  cli    .command("status")    .description("Check plugin health")    .action(async () => {      const health = await checkHealth();      console.log(`Status: ${health.ok ? "healthy" : "unhealthy"}`);      if (health.details) {        for (const [key, value] of Object.entries(health.details)) {          console.log(`  ${key}${value}`);        }      }    });}, { name"my-plugin" });

05

后台服务

api.registerService 注册在后台持续运行的服务。与钩子(事件触发)不同,后台服务是「主动运行」的——它有自己的生命周期,在 Gateway 启动时开始运行,在 Gateway 关闭时停止。适合定时任务、长连接监听等场景。
api.registerService({  name"my-sync-service",  description"Periodically sync data with external source",  async start(context) {    // 启动服务    context.logger.info("Sync service starting");    // 设置定时任务    const interval = setInterval(async () => {      try {        await syncData();        context.logger.debug("Sync completed");      } catch (error) {        context.logger.error("Sync failed", { errorString(error) });      }    }, 60000); // 每分钟同步一次    // 保存引用以便停止时清理    return { interval };  },  async stop(context, state) {    // 停止服务    if (state?.interval) {      clearInterval(state.interval);    }    context.logger.info("Sync service stopped");  },});

服务生命周期

服务特点

  • 后台运行:服务在 Gateway 进程内运行,不影响请求处理

  • 生命周期管理start 在 Gateway 启动时调用,stop 在关闭时调用

  • 状态保存start 的返回值会传递给 stop,用于清理资源

  • 日志:通过 context.logger 记录日志,自动带服务名称前缀


06

交互式处理器

api.registerInteractiveHandler 注册交互式的命令处理流程。与 CLI 子命令(一次执行完毕)不同,交互式处理器适合需要多轮用户输入的场景——比如安装向导、初始配置等。
api.registerInteractiveHandler({  id"setup-wizard",  name"Setup Wizard",  description"Interactive setup for the plugin",  async handler(context) {    // 步骤 1:询问 API 端点    const endpoint = await context.prompt("Enter API endpoint URL:");    // 步骤 2:询问认证方式    const authMethod = await context.select("Choose auth method:", [      { label"API Key"value"api-key" },      { label"OAuth"value"oauth" },      { label"None"value"none" },    ]);    // 步骤 3:根据选择收集信息    if (authMethod === "api-key") {      const apiKey = await context.prompt("Enter API key:", {        sensitivetrue,      });      // 保存配置    }    // 完成    context.success("Setup complete!");  },});

07

综合示例:监控插件

以下示例同时使用 HTTP 路由、后台服务和 CLI 命令,构建一个简单的监控插件:
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";export default definePluginEntry({  id"monitor-plugin",  name"Monitor Plugin",  version"1.0.0",  register(api) {    const metricsArray<{ timestampnumbervaluenumberlabelstring }> = [];    // HTTP API:获取指标    api.registerHttpRoute({      method"GET",      path"/monitor/metrics",      handlerasync (_req, res) => {        res.json({          count: metrics.length,          metrics: metrics.slice(-100), // 最近 100 条        });      },    });    // HTTP API:手动上报    api.registerHttpRoute({      method"POST",      path"/monitor/report",      handlerasync (req, res) => {        const { value, label } = req.body;        metrics.push({          timestampDate.now(),          value,          label: label ?? "unnamed",        });        res.json({ recordedtrue });      },    });    // 后台服务:定期收集系统指标    api.registerService({      name"metrics-collector",      async start(context) {        const interval = setInterval(() => {          const memUsage = process.memoryUsage();          metrics.push({            timestampDate.now(),            value: memUsage.heapUsed,            label"heap_used",          });        }, 30000); // 每 30 秒        return { interval };      },      async stop(_context, state) {        if (state?.intervalclearInterval(state.interval);      },    });    // CLI:查看实时指标    api.registerCli((cli) => {      cli        .command("metrics")        .description("View recent metrics")        .option("--last <n>""Number of entries to show", { default10 })        .action(async (args) => {          const entries = metrics.slice(-Number(args.last));          console.log("Timestamp\t\tValue\t\tLabel");          for (const entry of entries) {            const time = new Date(entry.timestamp).toISOString();            console.log(`${time}\t${entry.value}\t${entry.label}`);          }        });      cli        .command("metrics-reset")        .description("Clear all metrics")        .action(async () => {          metrics.length = 0;          console.log("Metrics cleared");        });    }, { name"monitor" });  },});

08

小结

本篇覆盖了 OpenClaw 的基础设施扩展能力:

  • HTTP 路由:为 Gateway 添加自定义端点

  • RPC 方法:内部服务间通信

  • CLI 子命令:扩展命令行界面

  • 后台服务:长期运行的定时任务

  • 交互式处理器:多轮用户输入流程

这些能力让插件从单纯的「能力提供方」升级为「完整的服务组件」——可以接收外部请求、暴露管理接口、在后台持续运行。


下一篇:技能(Skills)— 用 Markdown 驾驭 Agent 行为。我们将学习如何通过 Markdown 格式的技能文件精确引导 Agent 的行为。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-20 03:16:19 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/548616.html
  2. 运行时间 : 0.171565s [ 吞吐率:5.83req/s ] 内存消耗:4,860.45kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=75c9e6cf39a04203ff1de0e8dba6fd8a
  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.000599s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000975s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000312s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000330s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000500s ]
  6. SELECT * FROM `set` [ RunTime:0.000210s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000592s ]
  8. SELECT * FROM `article` WHERE `id` = 548616 LIMIT 1 [ RunTime:0.000626s ]
  9. UPDATE `article` SET `lasttime` = 1776626179 WHERE `id` = 548616 [ RunTime:0.007558s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000266s ]
  11. SELECT * FROM `article` WHERE `id` < 548616 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001126s ]
  12. SELECT * FROM `article` WHERE `id` > 548616 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001377s ]
  13. SELECT * FROM `article` WHERE `id` < 548616 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001827s ]
  14. SELECT * FROM `article` WHERE `id` < 548616 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.010239s ]
  15. SELECT * FROM `article` WHERE `id` < 548616 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006961s ]
0.173351s