乐于分享
好东西不私藏

OpenClaw Docker容器环境浏览器超时问题解决方案

OpenClaw Docker容器环境浏览器超时问题解决方案

📋 问题概述

问题现象

在 Docker 容器环境中使用浏览器工具时,频繁出现超时错误:

[tools] browser failed: Can't reach the OpenClaw browser control service (timed out after 15000ms)

环境信息

  • 「部署方式」:Docker Compose(openclaw-gateway + openclaw-sandbox-browser)
  • 「网络拓扑」:各个容器间通过 Docker 内网通信
  • 「CDP 地址」http://172.20.0.4:9222(容器 IP)
  • 「Bridge 地址」http://172.20.0.2:39893(Gateway 容器 IP)

🔍 问题排查过程

阶段 1:定位超时环节

通过在关键路径添加日志:

src/browser/client-fetch.ts

export async function fetchBrowserJson<T>(...): Promise<T> {  console.log(`[fetchBrowserJson] === START ===`);  console.log(`[fetchBrowserJson] Called with URL: ${url}`);  console.log(`[fetchBrowserJson] timeoutMs: ${timeoutMs}`);  // ... 其他日志}

「发现」:请求在 openTab 阶段超时。


阶段 2:追踪 openTab 执行路径

在 src/browser/server-context.tab-ops.ts 添加日志:

const openTab = async (urlstring): Promise<BrowserTab> => {  console.log(`[openTab] Opening URL: ${url}`);  console.log(`[openTab] Profile: ${profile.name}, cdpUrl: ${profile.cdpUrl}, isLoopback: ${profile.cdpIsLoopback}`);  console.log(`[openTab] Checking capabilities: usesChromeMcp=${capabilities.usesChromeMcp}, usesPersistentPlaywright=${capabilities.usesPersistentPlaywright}`);  // ...}

「关键发现」

[openTab] cdpUrl: http://172.20.0.4:9222, isLoopback: false[openTab] usesPersistentPlaywright: true

阶段 3:定位 Playwright 超时原因

查看 profile-capabilities.ts 的判断逻辑:

if (!profile.cdpIsLoopback) {  return {    mode: "remote-cdp",    usesPersistentPlaywright: true,  // ← 触发 Playwright 路径  };}

查看 pw-session.ts 的超时配置:

async function connectBrowser(cdpUrl: string): Promise<ConnectedBrowser> {  for (let attempt = 0; attempt < 3; attempt += 1) {    const timeout = 5000 + attempt * 2000;  // 5s + 7s + 9s = 21s    const browser = await chromium.connectOverCDP(endpoint, { timeout, headers });  }}

「根本原因」

  1. 「容器 IP 不是 loopback」 → cdpIsLoopback = false
  2. 「触发 Playwright 路径」 → usesPersistentPlaywright = true
  3. 「Playwright 连接重试总时长」:21秒
  4. 「外层 HTTP 请求超时」:15秒
  5. 「必然超时失败」

✅ 解决方案

方案概述

为 CDP 和 Playwright 操作增加动态超时配置,根据连接类型(本地/远程)使用不同的超时时间。


修改 1:增加远程超时常量

「文件:src/browser/cdp-timeouts.ts

export const CDP_HTTP_REQUEST_TIMEOUT_MS = 1500;export const CDP_WS_HANDSHAKE_TIMEOUT_MS = 5000;export const CDP_JSON_NEW_TIMEOUT_MS = 1500;+export const CDP_JSON_NEW_REMOTE_TIMEOUT_MS = 15000// 容器/远程环境

修改 2:支持超时参数传递

「文件:src/browser/cdp.ts

export async function createTargetViaCdp(opts: {   cdpUrl: string;   url: string;   ssrfPolicy?: SsrFPolicy;+  timeoutMs?: number; }): Promise<{ targetIdstring }> {+  console.log(`[createTargetViaCdp] cdpUrl: ${opts.cdpUrl}, timeoutMs: ${opts.timeoutMs}`);   let wsUrlstring;   if (isWebSocketUrl(opts.cdpUrl)) {     wsUrl = opts.cdpUrl;   } else {+    const versionTimeout = opts.timeoutMs ?? 1500;     const version = await fetchJson<{ webSocketDebuggerUrl?: string }>(       appendCdpPath(opts.cdpUrl"/json/version"),-      1500,+      versionTimeout,     );     // ...   }+  const handshakeTimeout = opts.timeoutMs ? Math.max(opts.timeoutMs * 25000) : 5000;-  return await withCdpSocket(wsUrl, async (send) => {+  return await withCdpSocket(wsUrl, async (send) => {     // ...-  });+  }, { handshakeTimeoutMs: handshakeTimeout }); }

修改 3:优化 Playwright 超时逻辑

「文件:src/browser/pw-session.ts

export async function createPageViaPlaywright(opts: {   cdpUrl: string;   url: string;   ssrfPolicy?: SsrFPolicy;+  timeoutMs?: number; }): Promise<{...}> {+  console.log(`[createPageViaPlaywright] Starting, timeoutMs: ${opts.timeoutMs}`);-  const { browser } = await connectBrowser(opts.cdpUrl);+  const connectTimeout = opts.timeoutMs ? Math.floor(opts.timeoutMs * 0.4) : undefined;+  const { browser } = await connectBrowser(opts.cdpUrl, connectTimeout);   // ...+  const gotoTimeout = opts.timeoutMs ? Math.floor(opts.timeoutMs * 0.5) : 30_000;-  const response = await page.goto(targetUrl, { timeout30_000 });+  const response = await page.goto(targetUrl, { timeout: gotoTimeout }); }-async function connectBrowser(cdpUrlstring): Promise<ConnectedBrowser> {+async function connectBrowser(cdpUrlstringtimeoutMs?: number): Promise<ConnectedBrowser> {   // ...   const connectWithRetry = async (): Promise<ConnectedBrowser> => {     let lastErrunknown;+    const maxAttempts = timeoutMs ? 1 : 3;  // 指定超时时不重试-    for (let attempt = 0; attempt < 3; attempt += 1) {+    for (let attempt = 0; attempt < maxAttempts; attempt += 1) {       try {-        const timeout = 5000 + attempt * 2000;+        const timeout = timeoutMs ?? (5000 + attempt * 2000);         // ...       }     }   } }

修改 4:传递超时参数

「文件:src/browser/server-context.tab-ops.ts

+import { CDP_JSON_NEW_TIMEOUT_MSCDP_JSON_NEW_REMOTE_TIMEOUT_MS } from "./cdp-timeouts.js"; const openTab = async (urlstring): Promise<BrowserTab> => {+  // 提前计算超时时间(Playwright 和 CDP 分支都会用到)+  const cdpNewTimeout = profile.cdpIsLoopback+    ? CDP_JSON_NEW_TIMEOUT_MS+    : CDP_JSON_NEW_REMOTE_TIMEOUT_MS;+  console.log(`[openTab] CDP timeout: ${cdpNewTimeout}ms (isLoopback: ${profile.cdpIsLoopback})`);   const ssrfPolicyOpts = withBrowserNavigationPolicy(state().resolved.ssrfPolicy);   if (capabilities.usesChromeMcp) {     // ... Chrome MCP 路径   }   if (capabilities.usesPersistentPlaywright) {     const mod = await getPwAiModule({ mode"strict" });     const createPageViaPlaywright = (mod as Partial<PwAiModule> | null)?.createPageViaPlaywright;     if (typeof createPageViaPlaywright === "function") {       const page = await createPageViaPlaywright({         cdpUrl: profile.cdpUrl,         url,         ...ssrfPolicyOpts,+        timeoutMs: cdpNewTimeout,  // 传递超时参数       });       // ...     }   }   // CDP 路径   const createdViaCdp = await createTargetViaCdp({     cdpUrl: profile.cdpUrl,     url,     ...ssrfPolicyOpts,+    timeoutMs: cdpNewTimeout,  // 传递超时参数   });   // ... /json/new 路径-  const created = await fetchJson<CdpTarget>(endpoint, CDP_JSON_NEW_TIMEOUT_MS, {+  const created = await fetchJson<CdpTarget>(endpoint, cdpNewTimeout, {     method"PUT",   }).catch(async (err) => {     if (String(err).includes("HTTP 405")) {-      return await fetchJson<CdpTarget>(endpoint, CDP_JSON_NEW_TIMEOUT_MS);+      return await fetchJson<CdpTarget>(endpoint, cdpNewTimeout);     }     throw err;   }); }

📊 效果对比

修改前

[openTab] cdpUrl: http://172.20.0.4:9222, isLoopback: false[openTab] usesPersistentPlaywright: true[connectBrowser] Attempt 1/3, timeout: 5000ms[connectBrowser] Attempt 2/3, timeout: 7000ms[connectBrowser] Attempt 3/3, timeout: 9000ms... (总计 21 秒,超过 15 秒超时)[tools] browser failed: timed out after 15000ms

修改后

[openTab] CDP timeout: 15000ms (isLoopback: false)[openTab] usesPersistentPlaywright: true[createPageViaPlaywright] Starting, timeoutMs: 15000[createPageViaPlaywright] Connecting to browser, timeout: 6000ms[connectBrowser] cdpUrl: http://172.20.0.4:9222, maxAttempts: 1[connectBrowser] Attempt 1/1, timeout: 6000ms[connectBrowser] ✅ Connected successfully[createPageViaPlaywright] Navigating to http://123571.xyz, timeout: 7500ms[createPageViaPlaywright] ✅ Page created: targetId=44438DD2EBF4275DF26C8EBF37C0BF9E[openTab] ✅ Playwright page created

「超时时间分配(15 秒总预算):」

  • 连接浏览器:6秒(40%)
  • 页面导航:7.5秒(50%)
  • 其他开销:1.5秒(10%)

🎯 关键技术点

1. 超时时间分配策略

// 连接超时:总预算的 40%const connectTimeout = timeoutMs * 0.4;// 导航超时:总预算的 50%const gotoTimeout = timeoutMs * 0.5;// WebSocket 握手:总预算的 2倍(或最少 5秒)const handshakeTimeout = Math.max(timeoutMs * 25000);

2. 重试策略优化

// 有明确超时要求时,不重试(避免累积延迟)const maxAttempts = timeoutMs ? 1 : 3;

3. 日志追踪

在关键路径添加结构化日志:

  • [openTab] - 顶层操作
  • [createPageViaPlaywright] - Playwright 路径
  • [createTargetViaCdp] - CDP 路径
  • [connectBrowser] - 浏览器连接

🔧 可选优化方案

方案 A:容器内强制使用 CDP 路径

「适用场景」:容器间通信稳定、不需要 Playwright 特性

「文件:src/agents/sandbox/browser.ts

import { isRunningInContainer } from "./docker.js";function buildSandboxBrowserResolvedConfig(params: {...}): ResolvedBrowserConfig {  const cdpHost = params.cdpHost;  const isStandardLoopback = cdpHost === "127.0.0.1" || cdpHost === "::1" || cdpHost === "localhost";  // 容器内的 CDP 连接视为本地快速连接,避免使用 Playwright  const cdpIsLoopback = isStandardLoopback || isRunningInContainer();  // ...}

「优点」

  • 更快的响应速度(避免 Playwright 开销)
  • 更简单的执行路径

「缺点」

  • 失去 Playwright 的导航检测能力
  • 不适用于真实远程 CDP

方案 B:智能判断网络类型

function isPrivateNetwork(host: string): boolean {  if (host.startsWith("172.")) return true;  if (host.startsWith("10.")) return true;  if (host.startsWith("192.168.")) return true;  return false;}const inContainerPrivateNetwork = isRunningInContainer() && isPrivateNetwork(cdpHost);const cdpIsLoopback = isStandardLoopback || inContainerPrivateNetwork;

「优点」

  • 容器内私有网络 → 使用 CDP
  • 容器内公网 IP → 使用 Playwright
  • 兼顾速度和功能

📚 相关文件清单

文件路径
修改内容
src/browser/cdp-timeouts.ts
新增远程超时常量
src/browser/cdp.tscreateTargetViaCdp
 支持 timeoutMs
src/browser/pw-session.tscreatePageViaPlaywright
 和 connectBrowser 支持超时
src/browser/server-context.tab-ops.ts
传递超时参数,添加诊断日志
src/browser/client-fetch.ts
添加调试日志

✅ 验证清单

  • [x] 容器环境下浏览器工具不再超时
  • [x] CDP 路径使用 15 秒超时
  • [x] Playwright 路径合理分配超时时间
  • [x] 日志完整可追踪
  • [x] 不影响本地开发环境

📖 经验总结

  1. 「超时配置应该分层」:网络层、连接层、操作层各有独立超时
  2. 「容器环境需要特殊处理」:IP 判断不能简单依赖 loopback
  3. 「重试策略要合理」:有明确超时要求时,重试会导致累积延迟
  4. 「日志是排查利器」:结构化日志 + 标签前缀便于过滤
  5. 「超时时间要留余地」:总预算不能全部分配完,需要预留 10% 开销

🔗 附录:完整代码差异

A. cdp-timeouts.ts

export const CDP_HTTP_REQUEST_TIMEOUT_MS = 1500;export const CDP_WS_HANDSHAKE_TIMEOUT_MS = 5000;export const CDP_JSON_NEW_TIMEOUT_MS = 1500;export const CDP_JSON_NEW_REMOTE_TIMEOUT_MS = 15000// 新增:容器/远程环境export const CHROME_REACHABILITY_TIMEOUT_MS = 500;

B. cdp.ts 核心修改

export async function createTargetViaCdp(opts: {  cdpUrl: string;  url: string;  ssrfPolicy?: SsrFPolicy;  timeoutMs?: number; // 新增参数}): Promise<{ targetIdstring }> {  console.log(`[createTargetViaCdp] cdpUrl: ${opts.cdpUrl}, timeoutMs: ${opts.timeoutMs}`);  await assertBrowserNavigationAllowed({    url: opts.url,    ...withBrowserNavigationPolicy(opts.ssrfPolicy),  });  let wsUrlstring;  if (isWebSocketUrl(opts.cdpUrl)) {    console.log(`[createTargetViaCdp] Using direct WS URL`);    wsUrl = opts.cdpUrl;  } else {    const versionTimeout = opts.timeoutMs ?? 1500;    console.log(`[createTargetViaCdp] Fetching /json/version, timeout: ${versionTimeout}ms`);    const version = await fetchJson<{ webSocketDebuggerUrl?: string }>(      appendCdpPath(opts.cdpUrl"/json/version"),      versionTimeout,    );    const wsUrlRaw = String(version?.webSocketDebuggerUrl ?? "").trim();    wsUrl = wsUrlRaw ? normalizeCdpWsUrl(wsUrlRaw, opts.cdpUrl) : "";    if (!wsUrl) {      console.error(`[createTargetViaCdp] No webSocketDebuggerUrl`);      throw new Error("CDP /json/version missing webSocketDebuggerUrl");    }    console.log(`[createTargetViaCdp] WebSocket URL: ${wsUrl}`);  }  const handshakeTimeout = opts.timeoutMs ? Math.max(opts.timeoutMs * 25000) : 5000;  console.log(`[createTargetViaCdp] Opening WebSocket with handshake timeout: ${handshakeTimeout}ms`);  return await withCdpSocket(wsUrl, async (send) => {    const created = (await send("Target.createTarget", { url: opts.url })) as {      targetId?: string;    };    const targetId = String(created?.targetId ?? "").trim();    if (!targetId) {      console.error(`[createTargetViaCdp] No targetId in response`);      throw new Error("CDP Target.createTarget returned no targetId");    }    console.log(`[createTargetViaCdp] ✅ Created targetId: ${targetId}`);    return { targetId };  }, { handshakeTimeoutMs: handshakeTimeout });}

C. pw-session.ts 核心修改

async function connectBrowser(cdpUrlstringtimeoutMs?: number): Promise<ConnectedBrowser> {  const normalized = normalizeCdpUrl(cdpUrl);  const cached = cachedByCdpUrl.get(normalized);  if (cached) {    return cached;  }  const connecting = connectingByCdpUrl.get(normalized);  if (connecting) {    return await connecting;  }  const connectWithRetry = async (): Promise<ConnectedBrowser> => {    let lastErrunknown;    const maxAttempts = timeoutMs ? 1 : 3;  // 指定超时时不重试    console.log(`[connectBrowser] cdpUrl: ${normalized}, timeoutMs: ${timeoutMs}, maxAttempts: ${maxAttempts}`);    for (let attempt = 0; attempt < maxAttempts; attempt += 1) {      try {        const timeout = timeoutMs ?? (5000 + attempt * 2000);        console.log(`[connectBrowser] Attempt ${attempt + 1}/${maxAttempts}, timeout: ${timeout}ms`);        const wsUrl = await getChromeWebSocketUrl(normalized, timeout).catch(() => null);        const endpoint = wsUrl ?? normalized;        const headers = getHeadersWithAuth(endpoint);        const browser = await withNoProxyForCdpUrl(endpoint, () =>          chromium.connectOverCDP(endpoint, { timeout, headers }),        );        const onDisconnected = () => {          const current = cachedByCdpUrl.get(normalized);          if (current?.browser === browser) {            cachedByCdpUrl.delete(normalized);          }        };        const connectedConnectedBrowser = { browser, cdpUrl: normalized, onDisconnected };        cachedByCdpUrl.set(normalized, connected);        browser.on("disconnected", onDisconnected);        observeBrowser(browser);        console.log(`[connectBrowser] ✅ Connected successfully`);        return connected;      } catch (err) {        console.error(`[connectBrowser] Attempt ${attempt + 1} failed:`, err);        lastErr = err;        const errMsg = err instanceof Error ? err.message : String(err);        if (errMsg.includes("rate limit")) {          break;        }      }    }    throw lastErr;  };  const promise = connectWithRetry();  connectingByCdpUrl.set(normalized, promise);  try {    return await promise;  } finally {    connectingByCdpUrl.delete(normalized);  }}export async function createPageViaPlaywright(opts: {  cdpUrl: string;  url: string;  ssrfPolicy?: SsrFPolicy;  timeoutMs?: number;}): Promise<{  targetIdstring;  titlestring;  urlstring;  typestring;}> {  console.log(`[createPageViaPlaywright] Starting, cdpUrl: ${opts.cdpUrl}, timeoutMs: ${opts.timeoutMs}`);  const connectTimeout = opts.timeoutMs ? Math.floor(opts.timeoutMs * 0.4) : undefined;  console.log(`[createPageViaPlaywright] Connecting to browser, timeout: ${connectTimeout}ms`);  const { browser } = await connectBrowser(opts.cdpUrl, connectTimeout);  const context = browser.contexts()[0] ?? (await browser.newContext());  ensureContextState(context);  const page = await context.newPage();  ensurePageState(page);  const targetUrl = opts.url.trim() || "about:blank";  if (targetUrl !== "about:blank") {    const navigationPolicy = withBrowserNavigationPolicy(opts.ssrfPolicy);    await assertBrowserNavigationAllowed({      url: targetUrl,      ...navigationPolicy,    });    const gotoTimeout = opts.timeoutMs ? Math.floor(opts.timeoutMs * 0.5) : 30_000;    console.log(`[createPageViaPlaywright] Navigating to ${targetUrl}, timeout: ${gotoTimeout}ms`);    const response = await page.goto(targetUrl, { timeout: gotoTimeout }).catch((err) => {      console.error(`[createPageViaPlaywright] Navigation failed:`, err);      return null;    });    await assertBrowserNavigationRedirectChainAllowed({      request: response?.request(),      ...navigationPolicy,    });    await assertBrowserNavigationResultAllowed({      url: page.url(),      ...navigationPolicy,    });  }  const tid = await pageTargetId(page).catch(() => null);  if (!tid) {    console.error(`[createPageViaPlaywright] Failed to get targetId`);    throw new Error("Failed to get targetId for new page");  }  console.log(`[createPageViaPlaywright] ✅ Page created: targetId=${tid}`);  return {    targetId: tid,    titleawait page.title().catch(() => ""),    url: page.url(),    type"page",  };}

D. server-context.tab-ops.ts 核心修改

import { CDP_JSON_NEW_TIMEOUT_MSCDP_JSON_NEW_REMOTE_TIMEOUT_MS } from "./cdp-timeouts.js";const openTab = async (urlstring): Promise<BrowserTab> => {  console.log(`[openTab] Opening URL: ${url}`);  console.log(`[openTab] Profile: ${profile.name}, cdpUrl: ${profile.cdpUrl}, isLoopback: ${profile.cdpIsLoopback}`);  // 提前计算超时时间(Playwright 和 CDP 分支都会用到)  const cdpNewTimeout = profile.cdpIsLoopback    ? CDP_JSON_NEW_TIMEOUT_MS    : CDP_JSON_NEW_REMOTE_TIMEOUT_MS;  console.log(`[openTab] CDP timeout: ${cdpNewTimeout}ms (isLoopback: ${profile.cdpIsLoopback})`);  const ssrfPolicyOpts = withBrowserNavigationPolicy(state().resolved.ssrfPolicy);  console.log(`[openTab] Checking capabilities: usesChromeMcp=${capabilities.usesChromeMcp}, usesPersistentPlaywright=${capabilities.usesPersistentPlaywright}`);  if (capabilities.usesChromeMcp) {    await assertBrowserNavigationAllowed({ url, ...ssrfPolicyOpts });    const page = await openChromeMcpTab(profile.name, url);    const profileState = getProfileState();    profileState.lastTargetId = page.targetId;    await assertBrowserNavigationResultAllowed({ url: page.url, ...ssrfPolicyOpts });    return page;  }  if (capabilities.usesPersistentPlaywright) {    console.log(`[openTab] Checking Playwright module...`);    const mod = await getPwAiModule({ mode"strict" });    console.log(`[openTab] Playwright module obtained:`, !!mod);    const createPageViaPlaywright = (mod as Partial<PwAiModule> | null)?.createPageViaPlaywright;    console.log(`[openTab] createPageViaPlaywright function available:`, !!createPageViaPlaywright);    if (typeof createPageViaPlaywright === "function") {      console.log(`[openTab] Using Playwright to create page`);      const page = await createPageViaPlaywright({        cdpUrl: profile.cdpUrl,        url,        ...ssrfPolicyOpts,        timeoutMs: cdpNewTimeout,  // 传递超时参数      });      console.log(`[openTab] ✅ Playwright page created: targetId=${page.targetId}, url=${page.url}`);      const profileState = getProfileState();      profileState.lastTargetId = page.targetId;      triggerManagedTabLimit(page.targetId);      return {        targetId: page.targetId,        title: page.title,        url: page.url,        type: page.type,      };    }    console.log(`[openTab] Playwright function not available, falling through to CDP`);  }  console.log(`[openTab] Using standard CDP path`);  if (requiresInspectableBrowserNavigationRedirects(state().resolved.ssrfPolicy)) {    throw new InvalidBrowserNavigationUrlError(      "Navigation blocked: strict browser SSRF policy requires Playwright-backed redirect-hop inspection",    );  }  const createdViaCdp = await createTargetViaCdp({    cdpUrl: profile.cdpUrl,    url,    ...ssrfPolicyOpts,    timeoutMs: cdpNewTimeout,  // 传递超时参数  })    .then((r) => r.targetId)    .catch(() => null);  if (createdViaCdp) {    const profileState = getProfileState();    profileState.lastTargetId = createdViaCdp;    const deadline = Date.now() + OPEN_TAB_DISCOVERY_WINDOW_MS;    while (Date.now() < deadline) {      const tabs = await listTabs().catch(() => [] as BrowserTab[]);      const found = tabs.find((t) => t.targetId === createdViaCdp);      if (found) {        await assertBrowserNavigationResultAllowed({ url: found.url, ...ssrfPolicyOpts });        triggerManagedTabLimit(found.targetId);        return found;      }      await new Promise((r) => setTimeout(r, OPEN_TAB_DISCOVERY_POLL_MS));    }    triggerManagedTabLimit(createdViaCdp);    return { targetId: createdViaCdp, title"", url, type"page" };  }  const encoded = encodeURIComponent(url);  const endpointUrl = new URL(appendCdpPath(cdpHttpBase, "/json/new"));  await assertBrowserNavigationAllowed({ url, ...ssrfPolicyOpts });  const endpoint = endpointUrl.search    ? (() => {        endpointUrl.searchParams.set("url", url);        return endpointUrl.toString();      })()    : `${endpointUrl.toString()}?${encoded}`;  console.log(`[openTab] Fetching /json/new: ${endpoint}, timeout: ${cdpNewTimeout}ms`);  const created = await fetchJson<CdpTarget>(endpoint, cdpNewTimeout, {    method"PUT",  }).catch(async (err) => {    console.error(`[openTab] PUT failed:`, err);    if (String(err).includes("HTTP 405")) {      console.log(`[openTab] Retrying with GET`);      return await fetchJson<CdpTarget>(endpoint, cdpNewTimeout);    }    throw err;  });  if (!created.id) {    console.error(`[openTab] Missing id in response:`, created);    throw new Error("Failed to open tab (missing id)");  }  console.log(`[openTab] ✅ Tab created: id=${created.id}`);  const profileState = getProfileState();  profileState.lastTargetId = created.id;  triggerManagedTabLimit(created.id);  return { targetId: created.idtitle: created.title ?? ""url: created.url ?? url, type: created.type ?? "page" };};

「文档版本」:v1.0「最后更新」:2026-03-24「适用版本」:OpenClaw Gateway (Docker 环境)

参考PR: https://github.com/openclaw/openclaw/pull/49392

看到这里,点个关注再走呗!

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-25 15:56:34 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/486124.html
  2. 运行时间 : 0.296180s [ 吞吐率:3.38req/s ] 内存消耗:4,794.32kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9e7362f249ef2505e8263d897867deb2
  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.68 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.001050s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001421s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.014494s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000792s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001520s ]
  6. SELECT * FROM `set` [ RunTime:0.000690s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001660s ]
  8. SELECT * FROM `article` WHERE `id` = 486124 LIMIT 1 [ RunTime:0.005115s ]
  9. UPDATE `article` SET `lasttime` = 1774425394 WHERE `id` = 486124 [ RunTime:0.002528s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000654s ]
  11. SELECT * FROM `article` WHERE `id` < 486124 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006622s ]
  12. SELECT * FROM `article` WHERE `id` > 486124 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000737s ]
  13. SELECT * FROM `article` WHERE `id` < 486124 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.015481s ]
  14. SELECT * FROM `article` WHERE `id` < 486124 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.013899s ]
  15. SELECT * FROM `article` WHERE `id` < 486124 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001639s ]
0.300216s