乐于分享
好东西不私藏

AI 编程做产品,为什么一定要懂邮箱验证?两种注册验证路径背后的产品逻辑

AI 编程做产品,为什么一定要懂邮箱验证?两种注册验证路径背后的产品逻辑

第一次做网站注册流程时,邮箱验证很容易被当成一个附属步骤。

一个输入框。

一封自动邮件。

一个验证码。

一个“后面再补也可以”的小功能。

实际做起来才会发现,它决定的不是一个页面细节,而是账号系统的成立规则:

邮箱验证表面上是在验证一个邮箱,实际上是在定义一套账号成立规则。

它背后牵着的,不只是一个发送邮件按钮,而是一整条业务链:

  • • 这个账号是不是真人可用
  • • 这个邮箱是不是用户本人能控制
  • • 系统什么时候算注册成功
  • • 未验证账号能不能登录
  • • 未验证账号能不能继续操作
  • • 邮件没收到时怎么补救
  • • 验证失败或过期后怎么处理
  • • 后台如何查看和干预状态

说得更直接一点:

邮箱验证从来不是一个表单细节,而是一套“账号真实性、状态流转、风控限制、用户触达、运营管理”共同构成的机制。

如果你用 AI 辅助开发,这一点会更明显。

只描述“做一个注册页”,通常只能得到表单、按钮和邮件发送逻辑。

要让它做出可用的账号系统,必须把状态、权限、过期、重发、异常处理这些规则说清楚。

所以这篇文章不打算讲代码。

我更想讲清楚的是:

  • • 邮箱验证到底在产品里解决什么问题
  • • 为什么它不是一个简单的注册步骤
  • • 两种主流验证路径到底差在哪里
  • • 新手在设计时最容易忽略哪些关键细节
  • • 使用 AI 辅助开发时,应该怎么把需求讲清楚

如果能把邮箱验证想明白,就不只是在理解一个功能。

你是在理解账号系统如何变得可用。

一、为什么邮箱验证不是“小功能”

先想一个很现实的问题。

如果你的产品允许任何人随便填一个邮箱就注册成功,会发生什么?

表面上看,数据可能会很好看。

注册数会增加,后台也会出现一种“转化不错”的错觉。

但很快,问题就会开始冒出来:

  • • 用户填了一个根本收不到信的邮箱
  • • 用户以后找不回账号
  • • 系统发通知、发账单、发提醒都送不到
  • • 垃圾注册、批量注册的成本很低
  • • 客服要处理一堆“我收不到邮件”“我改不了邮箱”的问题
  • • 你根本不知道哪些账号是真实可触达的

这时候你就会明白,邮箱验证的第一层意义,不是“走个流程”,而是“确认这个账号和一个真实可访问的邮箱建立了关系”。

它像是在系统里钉下一颗钉子。

这颗钉子一旦钉住,系统才终于能知道:

  • • 这个邮箱有人能打开
  • • 这个注册动作不是纯伪造
  • • 这个账号未来可以接收重要通知
  • • 这个账号的身份恢复路径更可信
  • • 后续很多功能可以建立在这个基础上

所以邮箱验证不是一个装饰性的步骤。

它是账号系统开始具备“可确认、可触达、可管理”能力的入口。

邮箱验证最重要的作用,不是多发一封邮件,而是让系统知道“这个账号背后确实有人能收到并确认”。

很多新手做产品,第一反应是先把注册页面做出来。

这很正常,因为页面最直观。

但页面只是外壳,机制才是骨架。

而邮箱验证,恰好就是账号机制里最典型的一块骨架。

二、邮箱验证到底在验证什么

很多人会下意识觉得,邮箱验证就是验证邮箱格式对不对。

当然不是。

邮箱格式校验,只能说明这串字符“看起来像一个邮箱地址”。

邮箱验证真正验证的是三件事:

1. 这个邮箱地址至少是可投递、可触达的

至少从流程上看,系统已经向这个地址发出了一封邮件,而用户需要通过邮件里的信息回来完成下一步。

严格说,邮箱验证不一定能证明“这个邮箱代表一个真实身份”,但它能确认一件更关键的事:

这个邮箱在当前注册流程里是可以被触达的。

2. 当前注册的人对这个邮箱有访问权

这才是关键。

用户能收到验证码,或者能点击激活链接,至少说明他能访问这个邮箱。

3. 这个账号可以被系统当成“有效账号”继续运营

一旦验证成立,后续很多动作才有基础:

  • • 找回密码
  • • 修改关键信息
  • • 接收账单和订单通知
  • • 接收系统提醒
  • • 接收营销或产品更新邮件
  • • 做更高权限的安全校验

所以你可以用一句最容易理解的话记住:

邮箱验证,不是在验证一段文本,而是在验证“这个账号背后有没有一个能被触达的人”。

三、最常见的两种注册验证路径

做网站时,最常见的邮箱验证路径,基本就两种。

两种邮箱验证路径对比

1. 先填邮箱,收验证码,验证通过后完成注册

这个流程你一定见过。

用户先输入邮箱,系统发一封带验证码的邮件,用户把验证码填回注册页,校验通过以后,注册才算完成。

用户视角下,它长这样:

  1. 1. 输入邮箱和其他注册信息
  2. 2. 点击发送验证码
  3. 3. 去邮箱里查看验证码
  4. 4. 回到注册页填写验证码
  5. 5. 验证通过,注册完成

这是“先验证,再完成注册”的思路。

2. 先完成注册,再去邮箱里点击验证链接完成激活

另一种也很常见。

用户先把注册信息提交掉,系统先创建一个账号,但这个账号还不算最终激活。系统会发一封验证邮件,用户必须点击里面的链接,账号才变成真正可用。

用户视角下,它通常是这样:

  1. 1. 输入邮箱、密码和其他注册信息
  2. 2. 点击注册
  3. 3. 页面提示“请前往邮箱完成验证”
  4. 4. 去邮箱里打开验证邮件
  5. 5. 点击激活链接
  6. 6. 返回网站,账号变成已验证状态

这就是“先建账号,再激活账号”的思路。

有些产品会让未激活用户完全不能登录。

也有些产品会允许先登录,但限制关键操作,比如:

  • • 不能创建正式项目
  • • 不能发起支付
  • • 不能邀请成员
  • • 不能调用接口
  • • 不能导出数据

所以你会发现,两种方式看起来都叫“邮箱验证”,但它们背后真正不同的,不是页面长得不一样,而是账号是在什么时候被系统正式承认。

四、这两种路径分别适合什么产品

很多人在选型时会问:

“那我到底该用哪一种?”

先说结论,没有绝对正确,只有更适合当前产品阶段的方案。

1. 验证码路径,适合想让验证动作尽量在当前页面完成的场景

它通常更适合这些情况:

  • • 你希望注册流程集中在一个页面里完成
  • • 你希望用户当下就完成验证,不要跳走太久
  • • 你的产品偏轻量,注册节奏要快
  • • 你的关键目标是尽快拿到一个已验证账号

这个路径的特点是流程闭环更强。

用户虽然也要去收邮件,但他心里会更容易理解成“我正在完成当前这个注册动作”。

2. 激活链接路径,适合更典型的 SaaS、工具站和内容产品

它通常适合这些情况:

  • • 你允许先创建账号状态
  • • 你需要把“注册”和“激活”拆成两个阶段
  • • 你希望未验证账号先沉淀进系统
  • • 你后续还会围绕激活状态做运营提醒
  • • 你接受部分用户注册后稍后再回来完成验证

这个路径的特点,是系统状态更清晰。

你会更容易区分:

  • • 已注册但未激活
  • • 已注册且已激活
  • • 已登录但权限受限
  • • 长时间未激活的沉默用户

如果你做的是 SaaS、后台类工具、会员系统、课程系统,这种模式非常常见。

3. 新手不要一开始就混合做太复杂

有些成熟产品会混合使用。

比如:

  • • 注册时发验证码
  • • 登录异地设备时再发验证码
  • • 修改邮箱时走激活链接
  • • 高风险操作时再做一次邮箱确认

这些都可以做。

但新手第一版不要一上来就全加。

先把一种主路径讲清楚、做稳定,比一开始堆很多验证方式更重要。

五、别只看页面,要看账号状态怎么流转

这一节是设计邮箱验证时最容易被忽略的部分。

因为很多人一说邮箱验证,脑子里只有两个页面:

  • • 注册页面
  • • 邮箱页面

但真实产品里,邮箱验证本质上是状态管理。

邮箱验证状态流转图

你至少要想清楚,账号相关状态可以分成三类:

第一类,是注册流程状态:

  • • 还没开始注册
  • • 注册信息已提交
  • • 验证邮件已发送
  • • 等待用户验证

第二类,是邮箱验证状态:

  • • 待验证
  • • 验证成功
  • • 验证失败
  • • 验证码或链接已过期
  • • 已经重新发送新的验证码或链接

第三类,是账号权限状态:

  • • 账号已激活
  • • 账号未激活但允许登录
  • • 账号未激活且禁止关键操作
  • • 账号长期未激活,进入冻结或清理流程

这三类状态不要混在一起想。

注册流程回答的是“用户走到哪一步了”。

邮箱验证回答的是“邮箱确认有没有完成”。

账号权限回答的是“这个账号现在能做什么”。

这就是为什么我一直说:

邮箱验证不是“发邮件”,而是“控制账号何时进入下一种状态”。

只要你开始用“状态”这个角度思考,很多问题就会自动变清楚:

  • • 用户没验证成功时,系统应该显示什么提示
  • • 用户能不能重新发送
  • • 用户重新发送以后,旧验证码还算不算
  • • 用户点击过期链接以后,应该看到什么页面
  • • 用户已经验证过,再点一次旧链接该怎么处理
  • • 后台应不应该能手动改状态

如果这些状态没有提前定义清楚,最后很容易只做出一个“能发邮件的注册页”,但账号系统仍然不可运营。

六、验证码注册路径,系统内部到底发生了什么

我们先讲第一种:邮箱验证码模式。

验证码注册流程图

从用户角度看,它只是一句“请输入验证码”。

但系统内部,通常至少发生了这些事:

1. 用户提交邮箱

这一步不是简单接收一段文本。

系统通常会先做几类基本判断:

  • • 格式是否合理
  • • 这个邮箱是否已经注册
  • • 当前发送频率是否超限
  • • 当前 IP 或设备是否异常

2. 系统生成验证码

这里的重点不是“生成一串数字”。

重点是这串验证码通常还会带着一堆规则:

  • • 多久过期
  • • 是否只能使用一次
  • • 输错几次后失效
  • • 重新发送后旧码是否作废
  • • 同一个邮箱短时间内能发几次

3. 系统把验证码发送到邮箱

到了这里,很多新手会觉得流程结束了。

其实这一步刚开始复杂。

因为你马上要面对现实世界的问题:

  • • 邮件可能延迟
  • • 邮件可能进垃圾箱
  • • 邮件服务可能偶发失败
  • • 用户可能连点多次“重新发送”

所以系统通常还需要有相应的反馈和限制。

4. 用户填写验证码,系统进行校验

校验时通常不只是判断“对不对”。

还要判断:

  • • 是否过期
  • • 是否已使用
  • • 是否超过尝试次数
  • • 是否属于这次注册会话
  • • 是否已经被新的验证码替代

5. 验证成功后,系统才正式完成注册

这才是验证码模式最核心的一点。

在很多设计里,账号的正式成立,是发生在验证码通过以后。

这会带来几个特点:

  • • 系统里少一些“半成品账号”
  • • 账号库更干净
  • • 只有验证通过的人才真正算新注册用户
  • • 统计口径更容易统一

但同时也意味着,如果用户卡在验证码这一步,注册就直接中断。

所以验证码模式往往更依赖当前流程的顺滑度。

如果用 AI 辅助实现这个功能,不要只写“做一个邮箱验证码注册”。

你至少要把这些规则一起说清楚:

  • • 验证码几分钟过期
  • • 重新发送后旧验证码是否失效
  • • 用户最多可以输错几次
  • • 同一邮箱多久可以重新发送一次
  • • 同一 IP 或设备短时间内最多能触发几次
  • • 验证通过前,账号数据是否需要先暂存
  • • 如果提前收集密码,密码如何安全处理,不能明文暂存
  • • 验证通过后,哪些字段才正式写入用户表

七、激活链接路径,系统内部到底发生了什么

再讲第二种:邮件激活链接模式。

激活链接流程图

这条链路的外观看起来更简单,但内部状态往往更多。

1. 用户先提交注册信息

这时系统通常会先创建一个账号。

但这个账号不是“完全可用账号”,而是一个未验证、未激活、待确认的账号。

2. 系统生成一个激活令牌或激活链接

这个令牌背后通常也会带规则:

  • • 是否一次性使用
  • • 多久过期
  • • 是否和当前账号强绑定
  • • 重发后旧链接是否失效

3. 系统发送激活邮件

用户会看到类似这样的提示:

“我们已经向你的邮箱发送了一封验证邮件,请点击邮件中的链接完成账号激活。”

这个提示看起来很普通,但它其实是在告诉用户:

“你现在只完成了第一阶段,还没真正结束。”

4. 用户点击链接,系统校验激活令牌

系统会检查:

  • • 链接是否有效
  • • 是否已过期
  • • 是否已使用
  • • 是否属于这个账号

通过以后,账号状态才会从“未激活”变成“已激活”。

5. 激活前后的权限可能完全不同

这也是激活链接模式最容易被忽略的一点。

很多产品不是简单地把未激活账号“锁死”,而是分层限制。

比如未激活时:

  • • 可以登录
  • • 可以看欢迎页
  • • 可以完成新手引导
  • • 但不能创建正式内容
  • • 不能调用核心功能
  • • 不能发起敏感操作

这样做的好处是,用户即使暂时没去点邮件,系统里也已经有一个账号记录,后续还能继续提醒和唤回。

所以激活链接模式,本质上更像是:

先把用户放进系统,再决定什么时候让他成为完整用户。

如果用 AI 辅助实现激活链接模式,也要提前讲清楚规则。

重点不是“邮件里有个链接”,而是:

  • • 注册后账号是什么初始状态
  • • 未激活账号能不能登录
  • • 未激活账号能访问哪些页面
  • • 激活链接多久过期
  • • 重新发送后旧链接是否失效
  • • 用户改邮箱后,旧邮箱的激活链接怎么处理
  • • 长时间未激活的账号要冻结、清理,还是继续保留

八、真正要比较的,是两套账号成立逻辑

前面讲了两条流程。

到了真正做产品选择时,不要只比较“填验证码”和“点链接”哪个更顺手。

你更应该比较的是:

两种路径优缺点对比
比较维度
验证码路径
激活链接路径
账号创建时机
通常是验证通过后才正式创建账号
通常是先创建未激活账号,再等待激活
账号池质量
更干净,半成品账号更少
会沉淀一批未激活账号
注册转化
当前流程更集中,但验证码环节容易造成中断
注册动作更快完成,但激活可能被延后
运营空间
更少依赖未激活用户召回
更容易围绕未激活用户做提醒和召回
权限设计
相对简单,验证前通常还不是正式用户
更复杂,要定义未激活账号能做什么
统计口径
“注册成功”通常更接近“已验证用户”
要区分“已注册”和“已激活”
客服问题
常见问题集中在收不到验证码、验证码过期
常见问题集中在未激活、链接过期、邮箱填错

所以,这不是两个 UI 选择,而是两种账号成立逻辑。

如果你做的是轻量工具、活动页、早期验证型产品,验证码路径通常更直接。

如果你做的是 SaaS、后台系统、课程系统、会员产品,激活链接路径通常更有运营和权限管理空间。

真正要提前想清楚的是:

你希望系统什么时候承认一个账号成立,以及你愿意为这个选择承担什么后续成本。

九、新手最容易忽略的关键细节

真实产品里,真正麻烦的从来不是主流程,而是异常流程。

邮箱验证常见异常清单

下面这些点,新手做产品时特别容易漏掉。

1. 邮件没收到怎么办

不能只说“请查看邮箱”。

你至少要想清楚:

  • • 是否允许重新发送
  • • 多少秒后才能重发
  • • 连续重发几次后是否临时限制
  • • 是否提示查看垃圾邮箱

2. 验证码或链接过期怎么办

不能让用户点进去只看到一个冷冰冰的报错。

更合理的是给一个明确出口:

  • • 已过期
  • • 可以重新发送
  • • 返回哪里继续

3. 用户把邮箱填错了怎么办

这是非常常见的问题。

尤其是在激活链接模式下,用户可能已经注册成功,但邮箱本身输错了。

这时你要提前想清楚:

  • • 能不能修改邮箱
  • • 修改后旧链接是否失效
  • • 新邮箱是否需要重新走验证

4. 已注册邮箱再次尝试注册怎么办

系统不能只报“邮箱已存在”就结束。

更好的方式是根据状态给出不同引导:

  • • 已验证账号:引导去登录
  • • 未验证账号:引导重新发送验证邮件
  • • 长时间未激活账号:提示继续激活或更换邮箱

5. 激活链接能不能重复点击

这也是一个典型细节。

如果用户已经激活,再次点击旧链接,系统不应该表现得像报错。

更好的方式是告诉他:

  • • 账号已经验证过
  • • 现在可以直接登录

6. 未验证账号是否要定期清理

如果长期不处理,系统里会堆很多未激活账号。

这会影响:

  • • 数据统计
  • • 用户管理
  • • 运营判断
  • • 邮箱唯一性占用

所以你最好提前决定:

  • • 未验证账号保留多久
  • • 到期后自动删除还是冻结
  • • 删除后原邮箱能否再次注册

十、从产品角度看,邮箱验证到底在平衡什么

邮箱验证不是越严格越好,也不是越省事越好。

它本质上是在平衡几件彼此会拉扯的事情。

1. 注册转化率

流程越长,理论上流失越多。

2. 账号真实性

验证越弱,伪造邮箱、垃圾账号就越多。

3. 风控成本

没有验证门槛,后面就要用更多方式补风控。

4. 售后和客服成本

邮箱没验证清楚,后续找回账号、改邮箱、发通知都会更麻烦。

5. 后续运营触达能力

如果用户邮箱根本不可达,很多运营动作都等于失效。

所以不要把邮箱验证理解成“一个习惯动作”。

它其实是在回答一个更底层的问题:

你的产品愿意用多大的注册摩擦,去换多高的账号质量和后续可管理性。

十一、用 AI 编程时,应该怎么描述这个需求

这部分非常重要。

因为很多人在用 AI 写功能时,会这样对 AI 说:

“帮我做一个邮箱验证注册功能。”

这句话当然也能生成一些东西。

但大概率只会生成:

  • • 一个注册表单
  • • 一个发送邮件按钮
  • • 一个验证码输入框,或者一个激活链接

它可以演示,但未必能用。

真正的问题在于,你有没有把规则讲清楚。

比如你至少应该让 AI 明白这些事:

  • • 我要用验证码模式还是激活链接模式
  • • 账号是在验证前创建,还是验证后创建
  • • 未验证账号能不能登录
  • • 未验证账号能不能操作核心功能
  • • 验证码或链接多久过期
  • • 是否允许重发
  • • 重发间隔多久
  • • 失败几次后怎么办
  • • 已注册但未验证的邮箱怎么处理
  • • 后台要不要能查看和手动处理验证状态

你可以把模糊需求改成这样:

我要实现邮箱验证码注册功能。

注册逻辑:
用户先填写邮箱、密码和昵称。
账号在验证码校验通过后才正式创建。
验证码通过前,注册信息只做临时保存,不写入正式用户表。
如果需要临时保存密码,也必须按账号密码的安全要求处理,不能明文保存。

验证码规则:
验证码 10 分钟过期。
同一邮箱 60 秒内不能重复发送。
同一邮箱 1 小时最多发送 5 次。
用户最多可以输错 5 次,超过后本次验证码失效。
重新发送验证码后,旧验证码立即失效。

异常处理:
如果邮箱已经注册,引导用户去登录。
如果邮件没收到,允许用户在倒计时结束后重新发送。
如果验证码过期,提示用户重新获取验证码。

后台管理:
后台需要能查看验证码发送记录、验证状态、失败次数和最近一次发送时间。

如果你选择的是激活链接模式,也可以这样描述:

我要实现邮件激活注册功能。

注册逻辑:
用户提交邮箱、密码和昵称后,系统先创建一个未激活账号。
未激活账号允许登录,但只能访问欢迎页和账号设置页,不能创建正式内容。

激活规则:
系统发送一封激活邮件,邮件中包含一次性激活链接。
激活链接 24 小时过期。
用户重新发送激活邮件后,旧链接失效。
用户点击有效链接后,账号状态从未激活变成已激活。

异常处理:
如果链接过期,页面提供重新发送入口。
如果账号已经激活,再次点击旧链接时提示账号已验证,并引导用户登录。
如果用户发现邮箱填错,允许在未激活状态下修改邮箱,并重新发送激活邮件。

后台管理:
后台需要能筛选未激活账号,查看激活邮件发送次数、最近发送时间和账号创建时间。
超过 30 天未激活的账号进入清理列表。
给 AI 提需求的结构图

你会发现,这里面大部分都不是代码。

它们首先是业务规则。

这也是 AI 编程时代最容易被误解的一点。

很多人以为 AI 强,就等于自己不需要思考。

恰恰相反。

AI 越强,越要求你把机制描述得像一个产品负责人,而不是像一个只会说“帮我做个功能”的人。

你描述得越像在定义系统规则,AI 产出的结果就越像一个真正能跑的产品。

十二、最后,给你一份开工清单

如果你今天要开始做一个带邮箱注册的网站,不用先急着写页面。

先回答下面这些问题:

  1. 1. 我要用邮箱验证码,还是邮件激活链接?
  2. 2. 账号是在验证成功后创建,还是先创建未激活账号?
  3. 3. 未验证账号能不能登录?
  4. 4. 未验证账号能不能使用核心功能?
  5. 5. 验证码或激活链接多久过期?
  6. 6. 用户能不能重新发送邮件?
  7. 7. 重发频率怎么限制?
  8. 8. 验证失败几次后要不要临时锁住?
  9. 9. 用户把邮箱填错了怎么办?
  10. 10. 已注册但未验证的邮箱再次注册时怎么处理?
  11. 11. 未验证账号是否要定期清理?
  12. 12. 后台如何查看、筛选和处理验证状态?
邮箱验证开工清单

这些问题一旦想清楚,你会发现,邮箱验证就不再只是“注册页加一步”。

它会变成一套你能讲清楚、能交给 AI、也能真正落地的产品机制。

邮箱验证不是为了让流程显得正式。

它真正的作用,是让系统知道:

这个账号背后是不是一个可触达、可继续服务的人。

而一旦这件事成立,注册、登录、通知、找回、安全、运营,很多后续能力才有了靠谱的基础。

这比“做一个能注册的网站”更难一点。

但也更接近一个真正可用的产品。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-11 11:48:23 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/605869.html
  2. 运行时间 : 0.185404s [ 吞吐率:5.39req/s ] 内存消耗:4,671.63kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=e8df2ac6b13726d898186a7ce9b55d7a
  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.000662s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000705s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.007480s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.006088s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000565s ]
  6. SELECT * FROM `set` [ RunTime:0.005772s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000616s ]
  8. SELECT * FROM `article` WHERE `id` = 605869 LIMIT 1 [ RunTime:0.005485s ]
  9. UPDATE `article` SET `lasttime` = 1778471303 WHERE `id` = 605869 [ RunTime:0.008614s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.013328s ]
  11. SELECT * FROM `article` WHERE `id` < 605869 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000910s ]
  12. SELECT * FROM `article` WHERE `id` > 605869 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.005433s ]
  13. SELECT * FROM `article` WHERE `id` < 605869 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.025562s ]
  14. SELECT * FROM `article` WHERE `id` < 605869 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005817s ]
  15. SELECT * FROM `article` WHERE `id` < 605869 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.010030s ]
0.187139s