乐于分享
好东西不私藏

AI编程丨网站如何添加人机验证?

AI编程丨网站如何添加人机验证?

你好,我是一卒。

因为我们的网站里面有调用 API,而调用 API 我们是要花钱的。所以为了避免被别人用机器人注册账号来薅羊毛,我们需要给我们的网站增加一个防护措施。

文章里面涉及到一些代码,在电脑上阅读体验更好。

这个防护措施就是给网站增加一个功能,来检查访问的是真人还是机器人脚本。

这个功能就是人机验证。人机验证这种方式有多种,这里我们选择 Cloudflare Turnstile。

Cloudflare 是一家美国互联网基础设施与网络安全公司,我们上篇文章提到的 DNS 域名解析就是这家公司的强项。Cloudflare 提供免费的 DNS 服务,而且安全性很高

Turnstile 直译过来是“旋转闸门”的意思,Cloudflare Turnstile 就像在这个闸门口放了一个保安,这个保安会验证来访问的是真人还是机器人

Cloudflare Turnstile 人机验证的效果是这样的:

一、选择 Cloudflare Turnstile 的理由

  • 完全免费,没有请求量限制
  • 用户体验好:不像谷歌的 reCAPTCHA 人机验证,要点红绿灯,自行车等,很麻烦
  • 接入简单:前端加个组件,后端加个验证接口

Cloudflare Turnstile 有三种模式,分别是Managed托管模式、Non-Interactive非交互模式、Invisible 隐身模式

直接选择托管模式即可

托管模式的意思是,Cloudflare 会根据访问者的风险等级来决定如何验证:

  1. 如果 Cloudflare 觉得是真人,就直接放行,用户什么都看不到。
  2. 如果 Cloudflare 觉得有可能是真人,也可能不是真人,那就会在页面上出现一个小方块,让用户点击一下。
  1. 如果 Cloudflare 觉得是机器人,则会直接验证失败。

二、如何配置 Cloudflare Turnstile 人机验证?

网址:https://www.cloudflare.com/

  1. 点击 Turnstile
  1. 点击 Add widget 添加组件,添加域名
  1. 选择Managed托管模式,点击创建
  1. 复制站点密钥和私密密钥

这两个密码不要泄露,要在后端添加到环境变量里使用。

Site Key 泄露:几乎没有风险

Secret Key 泄露:风险很大

它的作用是让你的后端服务器去 Cloudflare 验证"用户提交的 token 是不是真的"。如果它泄露了,

人机验证直接失效。

任何人拿到你的 Secret Key,就可以自己写代码,伪造一个"验证通过"的响应发给你的后端。你的后端以为验证通过了,实际上根本没有经过 Turnstile 检查。机器人就可以畅通无阻地注册账号、薅你的 AI 额度,就像没加人机验证一样。之前做的所有防护都白费了。

  1. 把两个key保存在环境变量里

在项目根目录下面的 .env.local 文件添加这密钥:

# Cloudflare Turnstile 配置

NEXT_PUBLIC_TURNSTILE_SITE_KEY=0x4AAAAAADOpKhlVxxxxxxxxx

TURNSTILE_SECRET_KEY=0x4AAAAAADOpKjQzrS4UQG9Jxxxxxxxxxxx

SITE_KEY要加"NEXT_PUBLIC"前缀

不加 NEXT_PUBLIC_ 前缀,前端代码就读不到这个变量,Turnstile 组件会拿不到 Site Key,验证功能直接无法工作。

这是 Next.js 的一个安全设计机制。Next.js 把环境变量分成两类:

不带 NEXT_PUBLIC_ 前缀的变量,只存在于服务器端(后端)。当你的前端页面在用户浏览器里运行时,这些变量根本不会被打包进去,前端代码访问它们只会得到 undefined(空值)。

带 NEXT_PUBLIC_ 前缀的变量,Next.js 会在构建时把它的值直接放进前端代码里,这样浏览器端也能访问到。

调试的时候也可以用这个官方测试的 key 先跑通流程

官方测试 Key:  - sitekey: 1x00000000000000000000AA  - secret: 1x0000000000000000000000000000000AA
  1. 安装前端组件

在终端运行

npm install @marsidev/react-turnstile

这是一个非常简单的第三方依赖包。

@marsidev/react-turnstile 本质上就是有人把 Cloudflare 官方的 Turnstile 脚本封装成了一个 React 组件,让你不用自己手动写那些底层的 JS 初始化代码。

运行 npm install @marsidev/react-turnstile 之后,你只需要做两件事:在文件顶部 import 它,然后把组件放到表单里,传入 Site Key 和一个回调函数就完了。代码量非常少。

  1. 在注册页面添加人机验证组件

我们要做的,是在注册表单里加一个"验证组件"。当用户填完信息准备注册时,这个组件会悄悄在后台判断他是不是真人,判断通过后会给你一张"通行证"(token),你再把这张通行证连同注册信息一起发给后端,后端拿着这张通行证去 Cloudflare 核验,核验通过才允许注册。

整个前端改动分三步。

第一步:导入组件库(Import)

import { Turnstile } from '@marsidev/react-turnstile'

意思是:告诉你的代码文件"我要用一个叫 Turnstile 的组件,它来自 @marsidev/react-turnstile 这个安装好的包"。不写这行,后面用 <Turnstile /> 时代码会报错,因为它不知道这个东西是什么。

这行写在文件最顶部,和其他 import 语句放在一起。

第二步:声明状态变量(State Declaration)

const [turnstileToken, setTurnstileToken] = useState('');

在 React 里,页面上任何会变化的数据,都需要用 useState 来存储。这里我们需要存的是 Turnstile 验证通过后返回的 token(通行证)。

为什么要这一步? 因为第三步的组件里用到了 setTurnstileToken,如果没有提前声明,代码会报错"找不到这个函数"。

第三步:放置验证组件(Component Placement)

<Turnstile  siteKey={process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY!}  onSuccess={(token) => {    setTurnstileToken(token)  }}/>

这段代码放在表单里、注册按钮的上方。它做了两件事:

  • siteKey:告诉 Turnstile 组件你的站点密钥是什么,它用这个去联系 Cloudflare 做验证。这里用的是环境变量,而不是直接写死密钥,是为了安全。
  • onSuccess 就像你在便利店门口装了一个人脸识别闸机。

闸机平时是关着的。当它扫描完你的脸、确认你是真人之后,会做两件事:第一,把门打开让你进去;第二,打印一张小票给你,上面写着"此人已验证,是真人"。

(token) => {  setTurnstileToken(token)}

这个代码就是在说:"等闸机验证成功、把小票打出来之后,我把这张小票收好(存进 turnstileToken 这个变量里)。"

验证没通过之前,这段代码什么都不做,小票也不会有。只有验证成功的那一刻,它才会触发,把 token 这张"通行证小票"保存起来,等用户点注册按钮的时候,再把它交给后端查验。

为什么放在注册按钮上方? 纯粹是用户体验的考虑——用户填完信息,看到验证组件,验证通过后再点注册按钮,流程自然顺畅。

什么叫回调函数?

"回调"的意思就是:等某件事发生了,再来执行这段代码。

用生活比喻:你叫了外卖,然后告诉自己"等外卖到了,我就去开门"。这个"等外卖到了再执行的动作",就是回调。

onSuccess={(token) => {  setTurnstileToken(token)}}

意思是:"等 Turnstile 验证成功了,再执行 setTurnstileToken(token) 这行代码"。验证没成功之前,这段代码不会运行。

  1. 后端添加验证逻辑

前端是可以绕过的,所以必须要在后端的注册页面的逻辑下面加上人机验证,才算真正完成了整个步骤。

在后端注册逻辑的代码文件里,加上这段代码

// 从请求体中拿到前端传来的 Turnstile tokenconst { turnstileToken, ...registrationData } = await request.json()// 去 Cloudflare 验证这个 token 是不是真的const verifyResponse = awaitfetch('https://challenges.cloudflare.com/turnstile/v0/siteverify',  {method:'POST',headers: { 'Content-Type':'application/json' },body:JSON.stringify({secret: process.env.TURNSTILE_SECRET_KEY,response: turnstileToken,    }),  })const verifyResult = await verifyResponse.json()// 如果验证失败,直接拒绝if (!verifyResult.success) {returnResponse.json(    { error:'人机验证失败,请重试' },    { status:403 }  )}// 验证通过,继续正常的注册流程...

如果不会改,就把这段代码丢给AI,让AI来帮你改,这是AI改完之后的代码:

import { NextRequestNextResponse } from'next/server';import bcrypt from'bcryptjs';import { getSupabaseClient } from'@/storage/database/supabase-client';exportasyncfunctionPOST(request: NextRequest) {try {const { username, password, turnstileToken } = await request.json();  // 👈 这里加了 turnstileToken// Turnstile 人机验证  👈 这一整块是新加的const verifyResponse = awaitfetch('https://challenges.cloudflare.com/turnstile/v0/siteverify',      {method:'POST',headers: { 'Content-Type':'application/json' },body:JSON.stringify({secret: process.env.TURNSTILE_SECRET_KEY,response: turnstileToken,        }),      }    );const verifyResult = await verifyResponse.json();if (!verifyResult.success) {returnNextResponse.json({ error:'人机验证失败,请重试' }, { status:403 });    }// 人机验证结束 👆if (!username || !password) {returnNextResponse.json({ error:'用户名和密码不能为空' }, { status:400 });    }if (username.length < 2 || username.length > 50) {returnNextResponse.json({ error:'用户名长度需在2-50之间' }, { status:400 });    }if (password.length < 6) {returnNextResponse.json({ error:'密码长度不能少于6位' }, { status:400 });    }const supabase = getSupabaseClient();const { data: existing } = await supabase      .from('users')      .select('id')      .eq('username', username)      .maybeSingle();if (existing) {returnNextResponse.json({ error:'用户名已存在' }, { status:409 });    }const hashedPassword = await bcrypt.hash(password, 10);const { data, error } = await supabase      .from('users')      .insert({ username, password: hashedPassword })      .select('id, username, created_at')      .single();if (error) {console.error('Register DB error:', error);returnNextResponse.json({ error:'注册失败,请重试' }, { status:500 });    }returnNextResponse.json({user: { id: data.idusername: data.username },    });  } catch (err) {console.error('Register API error:', err);returnNextResponse.json({ error:'注册失败,请重试' }, { status:500 });  }}

总结一下改了哪两个地方:

第一处,第一行读取请求数据的地方,原来只读 username 和 password,现在多读一个 turnstileToken:

// 改前const { username, password } = await request.json();// 改后const { username, password, turnstileToken } = await request.json();

第二处,紧接着在这行下面,插入整块 Turnstile 验证逻辑。它必须放在最前面,这样机器人的请求在进入任何注册流程之前就被拦截掉了。

注意事项:

第一点:验证地址是固定的

https://challenges.cloudflare.com/turnstile/v0/siteverify 这个地址是 Cloudflare 官方提供的"核验窗口",全世界所有用 Turnstile 的人都用同一个地址。你不需要理解它,照抄就行,一个字母都不要改。

第二点:每张通行证只能用一次

token 就像电影票,撕过一次就作废了。用户注册成功后,这张 token 就失效了,下次注册必须重新验证、拿一张新的。这是 Cloudflare 故意设计的,防止有人拿一张通行证反复用。

第三点:通行证有5分钟有效期

用户打开注册页面,Turnstile 验证通过,发了一张 token 给你。但如果用户发呆了10分钟才点注册按钮,这张 token 已经过期了,后端验证会失败。遇到这种情况,让用户刷新页面重新验证一次就好了,这是正常现象。

设置好之后,先让 AI 验证一下看是否有 Bug 需要修复

  1. 最后验证

配置好人机验证之后,正常的用户会看到注册页面出现一个小方块的人机验证按钮。

如果是机器人批量注册,通过脚本调用注册接口,由于它拿不到 Cloudflare Turnstile token,后端验证就会失败,注册会被拒绝。即使它伪造了 token,Cloudflare 也会验证失败,注册同样会被拒绝。

这样我们的 API 就不会被薅羊毛了。只要网站有注册或免费的资源,比如调用API 就一定要加人机验证。

测试成功:

感谢你看到这里,下期分享怎么给网站添加云存储的功能。

[AI编程] 系列文章:

1.AI编程丨歧义是最大的bug

2.AI编程丨消除歧义的方法:SPEC

3.AI编程丨程序运行前提:安装环境及依赖

4.AI编程丨如何正确调用API?

5.AI编程丨数据库必备知识

6.AI编程丨新手怎么设计前端界面?

7.AI编程丨如何精准处理代码报错?

8.AI编程丨如何把网站部署上线?

9.AI编程丨如何给网站绑定专属域名?

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