当前位置:首页>php>集成 PHP 支付网关时需要了解的事项

集成 PHP 支付网关时需要了解的事项

  • 2026-04-19 07:23:06
集成 PHP 支付网关时需要了解的事项

在产品会议中,支付流程看起来可能出奇地简单。

用户点击 立即支付。应用与网关通信。资金通过。订单标记为已支付。大家继续前进。

然后生产环境上线了。

一个客户被扣款,但你的数据库仍然显示支付失败。另一个用户在结账后立即关闭浏览器,你的 ứng dụng 从未更新订单。沙箱环境运行良好,但实时环境开始抛出签名错误、超时问题和重复回调。突然间,这个“简单”的集成成为整个系统中最敏感的部分。

我曾在生产环境中不止一次见过这种情况:支付网关本身并不是真正的问题。真正的问题在于应用如何处理状态、信任、重试和异步事件。PHP 只是按照指示执行。它只是没有得到正确的指示。

如果你正在 PHP 中集成支付网关,这才是关键部分。不仅仅是如何发送请求,而是底层实际发生了什么、集成通常在哪里出错,以及如何构建能在真实流量中经受住考验的东西。

支付不是单一请求

许多开发者将支付集成视为普通的表单提交:

  • 用户提交结账表单
  • PHP 向网关发送请求
  • 网关返回成功
  • 标记订单为已支付

这种思维模型太简单了。

更好地思考支付流程的方式是:你的应用和支付提供商在多个系统间协调交易,在不同时间进行,且信任不完整

通常,流程更像是这样:

  • 你的应用在本地创建订单
  • 你的后端向网关 API 发送请求
  • 客户被重定向、显示二维码、打开电子钱包,或完成 3D Secure
  • 网关异步处理支付
  • 网关向你的服务器发送回调或 webhook
  • 你的应用验证回调并更新最终支付状态

这意味着浏览器不是真相来源。

前端可以告诉你用户看到了什么。它无法可靠地告诉你资金是否真的转移了。

这就是为什么支付集成感觉棘手。你不仅仅在处理 HTTP 请求。你在处理 状态转换

  • pending(待处理)
  • paid(已支付)
  • failed(失败)
  • expired(过期)
  • refunded(已退款)
  • canceled(已取消)

一旦你将支付视为状态机而不是按钮点击,架构就会变得清晰得多。

PHP 中实际发生了什么

PHP 通常用于请求-响应模型。用户访问端点,PHP 运行,发送输出,请求结束。

支付网关并不总是完美契合这种模式。

你的结账页面可能在一个请求中创建交易。网关回调可能在 10 秒后以完全不同的请求到达。用户刷新可能在回调到达前访问你的状态页面。如果第一次状态同步失败,重试作业也可能稍后运行。

因此,你的 PHP 应用需要围绕 持久状态 构建,而不是临时请求内存。

一些有用的思维模型:

你的数据库就是内存

不要依赖会话状态或用户刚刚在浏览器中做了什么。

存储:

  • 订单 ID
  • 支付引用
  • 当前状态
  • 金额
  • 货币
  • 提供商响应元数据
  • 时间戳
  • 如果适用,幂等性键

如果进程被中断,你的数据库仍应让你重建真相。

Webhook 是事实,重定向是提示

如果用户从支付页面返回,前端显示“成功”,这对 UX 可能有用,但不足以最终确定订单。

可靠来源通常是提供商的服务器到服务器通知,加上你自己的验证逻辑。

支付状态不是二元的

许多开发者将支付建模为 paid = 0 或 paid = 1。

这很快就会崩溃。

真实系统需要更多状态,因为时机很重要。“待处理但用户已离开页面”不同于“失败因为卡被拒绝”,两者又不同于“提供商说成功但内部履行尚未运行”。

破坏支付集成的常见错误

以下是我最常看到的错误。

1. 过早信任前端

这通常发生在应用在成功重定向或 JavaScript 事件后立即将订单标记为已支付。

为什么会发生:前端似乎确认了成功,立即更新 UI 感觉很快。

它破坏了什么:用户可能最终得到从未实际结算的已支付订单。在某些情况下,如果验证薄弱,攻击者可以操纵客户端流程。

返回 URL 是用户体验的一部分。它不是支付证明。

2. 不验证 webhook 签名

许多网关使用 HMAC 或其他签名方案对回调进行签名。

为什么会发生:开发者假设端点足够隐秘,或者只在沙箱中测试,一切看起来干净。

它破坏了什么:任何人可能访问你的回调端点并伪造支付事件。这是严重的信任失败。

始终按照提供商期望的方式精确验证签名。

3. 缺少幂等性处理

支付系统会重试。网关会重试回调。你的工作者会重试失败作业。用户会双击按钮。

为什么会发生:代码路径在快乐路径测试中似乎有效,因此忽略了重复交付。

它破坏了什么:重复订单履行、重复发送邮件、库存损坏、重复插入,甚至重复钱包记账。

如果相同事件到达两次,你的系统应产生相同最终状态,而无副作用。

4. 在不检查允许转换的情况下更新状态

回调到达说“paid”,代码更新行。另一个回调稍后到达带有不同状态。手动管理员操作也修改支付。

为什么会发生:状态更新被视为独立写入,而不是受控转换。

它破坏了什么:无效状态和竞争条件。一个已退款的支付可能因为旧回调延迟处理而意外再次变为“paid”。

将状态变更视为规则,而不是随意赋值。

5. 将业务逻辑直接混入控制器代码

一切都放入一个结账端点:验证、DB 写入、网关调用、日志记录、状态更新和邮件发送。

为什么会发生:快速发货。

它破坏了什么:调试变得痛苦。测试变得更难。提供商行为的小变化可能影响结账流程的不相关部分。

支付值得一个服务层。

6. 日志记录太少或太多

有些团队几乎不记录日志。其他团队转储原始负载,包括秘密、令牌或个人数据。

为什么会发生:日志通常只在出问题后添加。

它破坏了什么:没有日志,你无法调试。不安全的日志会创建安全问题,甚至合规问题。

你需要结构化日志,敏感字段被屏蔽。

一个糟糕的示例:快速、脆弱且常见

以下是那种在演示中“有效”但在真实条件下失败的代码:

<?php if ($_GET['status'] === 'success') { $orderId = $_GET['order_id']; $pdo->query( "UPDATE orders SET payment_status = 'paid' WHERE id = $orderId " ); echo " Payment successful"; }这个有多个问题:

  • 信任查询字符串输入
  • 在 SQL 中使用字符串插值
  • 假设前端重定向等于成功支付
  • 没有验证
  • 没有日志记录
  • 没有处理重复或延迟事件

这种集成会在后期造成对账头痛。

PHP 8+ 中的更好方法

更安全的架构看起来像这样:

  • 先创建订单
  • 创建带有待处理状态的支付记录
  • 从服务器调用网关
  • 存储提供商交易 ID
  • 监听 webhook 通知
  • 验证真实性
  • 使用受控转换更新支付
  • 只有然后触发履行

创建支付意图

<?php declare(strict_types=1); final class PaymentService { public function __construct( private PDO $pdo, private GatewayClient $gateway ) {} public function createPayment(int $orderId, int $amount): array { $stmt = $this->pdo->prepare( 'INSERT INTO payments (order_id, amount, status, created_at) VALUES (:order_id, :amount, :status, NOW())' ); $stmt->execute([ 'order_id' => $orderId, 'amount' => $amount, 'status' => 'pending', ]); $paymentId = (int) $this->pdo->lastInsertId(); $response = $this->gateway->createTransaction([ 'reference' => (string) $paymentId, 'amount' => $amount, ]); $update = $this->pdo->prepare( 'UPDATE payments SET provider_tx_id = :provider_tx_id WHERE id = :id' ); $update->execute([ 'provider_tx_id' => $response['transaction_id'], 'id' => $paymentId, ]); return $response; } }这个做对了一些重要的事情:

  • 在外部调用变得混乱前持久化状态
  • 使用预准备语句
  • 存储提供商交易 ID
  • 将支付创建逻辑保存在一个地方

安全处理 webhook

<?php declare(strict_types=1); final class WebhookController { public function __construct( private PDO $pdo, private LoggerInterface $logger, private SignatureVerifier $verifier ) {} public function handle(): void { $rawBody = file_get_contents('php://input') ?: ''; $signature = $_SERVER['HTTP_X_SIGNATURE'] ?? ''; if (!$this->verifier->isValid($rawBody, $signature)) { http_response_code(401); echo 'Invalid signature'; return; } $payload = json_decode($rawBody, true, flags: JSON_THROW_ON_ERROR); $paymentId = (int) ($payload['reference'] ?? 0); $newStatus = $payload['status'] ?? 'unknown'; $stmt = $this->pdo->prepare( 'SELECT status FROM payments WHERE id = :id FOR UPDATE' ); $this->pdo->beginTransaction(); $stmt->execute(['id' => $paymentId]); $currentStatus = $stmt->fetchColumn(); if ($currentStatus= false) { $this-&gt;pdo-&gt;rollBack(); http_response_code(404); echo 'Payment not found'; return; } if ($currentStatus !'paid' && $newStatus === 'paid') { $update = $this->pdo->prepare( 'UPDATE payments SET status = :status, paid_at = NOW() WHERE id = :id' ); $update->execute([ 'status' => 'paid', 'id' => $paymentId, ]); } $this->pdo->commit(); $this->logger->info('Payment webhook processed', [ 'payment_id' => $paymentId, 'new_status' => $newStatus, ]); echo 'OK'; } }这不是完整的框架示例,但模式是重点:

  • 在信任前验证
  • 安全解析 JSON
  • 在状态重要处使用事务
  • 避免重复效果
  • 记录发生了什么

最小签名验证器

<?php declare(strict_types=1); final class SignatureVerifier { public function __construct(private string $secret) {} public function isValid(string $payload, string $signature): bool { $expected = hash_hmac('sha256', $payload, $this->secret); return hash_equals($expected, $signature); } }使用恒定时间比较。小细节,重要习惯。

实用的调试模式

当支付失败时,在随机控制器中 var_dump() 很少足够。你需要帮助你在系统间连接事件的日志。

<?php $logger->info('Gateway request failed', [ 'order_id' => $orderId, 'payment_id' => $paymentId, 'http_status' => $response->getStatusCode(), 'provider_code' => $providerErrorCode ?? null, 'trace_id' => $traceId, ]);有用的调试字段包括:

  • 内部订单 ID
  • 内部支付 ID
  • 提供商交易 ID
  • HTTP 状态
  • 提供商特定错误代码
  • 重试次数
  • 跟踪或相关 ID

除非绝对必要且安全,否则不要记录卡号、访问令牌、秘密或原始个人数据。

如何正确构建集成结构

坚实的集成通常像这样分离关注点:

结账控制器

负责:

  • 验证请求输入
  • 创建订单
  • 调用支付服务
  • 返回重定向 URL、令牌或支付说明

支付服务

负责:

  • 创建支付记录
  • 调用提供商 API
  • 将提供商响应映射到内部字段
  • 封装重试和超时行为

Webhook 处理程序

负责:

  • 认证发送者
  • 验证负载形状
  • 应用允许的状态转换
  • 在需要时记录原始事件元数据
  • 安全触发下游动作

履行层

负责:

  • 只在确认支付后发货访问、积分或商品
  • 本身是幂等的

这种分离在业务添加另一个支付提供商、重试移到队列,或引入对账作业时会带来回报。

一个简短的生产故事

我合作的一个团队有一个结账流程,在返回 URL 上标记订单为已支付,因为这让仪表板“感觉即时”。直到移动用户在银行应用中批准支付后关闭浏览器。它看起来正常,直到那时。网关正确结算了支付,但应用错过了最终状态,因为它依赖客户返回站点。

修复并不复杂:将信任移到 webhook,将返回页面视为信息性,并为边缘情况添加状态轮询后备。支持票据几乎立即下降。

现代 Web 应用的生产注意事项

支付集成现在生活在更广泛的系统内。这意味着现代运营关注点很重要。

安全

至少:

  • 验证 webhook 签名
  • 将秘密存储在环境变量或适当的秘密管理器中
  • 到处使用 HTTPS
  • 在服务器上验证金额和货币
  • 在渲染用户可见字段时转义输出
  • 将回调端点限制为仅需要的内容

如果你的应用有用户账户,也在其他地方使用安全默认值。支付不与认证和会话处理隔离。

扩展

随着流量增长,请求周期内的同步支付逻辑变得昂贵。

一些有用的模式:

  • 将非关键后续工作移到队列
  • 使 webhook 处理程序快速且确定性
  • 保持数据库写入小且索引
  • 除非需要,否则避免为相同状态多次调用提供商 API

目标很简单:快速确认回调,单独执行繁重工作。

可观察性

这是许多团队准备不足的地方。

你想要能够回答:

  • 我们发送了请求吗?
  • 网关接收到了吗?
  • webhook 到达了吗?
  • 我们因为签名不匹配拒绝了吗?
  • 数据库更新成功了吗?
  • 履行运行了吗?

没有日志、指标和可跟踪 ID,支付事件就变成猜测。

缓存

在这里要小心。

除非你理解含义,否则不要积极缓存支付状态页面。陈旧的缓存响应可能让用户认为支付失败,而它仍在处理,或者更糟,在成功后显示过时状态。

缓存对产品目录很棒。对实时财务状态则不然。

部署和环境差距

沙箱有用,但生产行为不同。

常见差异:

  • 更严格的签名处理
  • 真实网络延迟
  • 速率限制
  • 不同的回调时机
  • 不同的欺诈检查
  • 更严格的 TLS 要求

使用延迟通知、重复回调和网络失败测试你的集成。不只是快乐路径。

调试检查清单

当支付问题出现时,按此序列检查:

检查订单和支付记录确认内部状态、金额、货币、时间戳和提供商交易 ID。检查出站 API 日志你的应用发送了请求吗?发送了什么负载?返回了什么 HTTP 状态?检查 webhook 交付提供商发送了回调吗?你的服务器接收到了吗?它被拒绝了吗?验证签名逻辑比较原始请求体、秘密和签名头处理。小格式错误会导致真实失败。检查幂等性行为相同事件交付了两次吗?你的处理程序安全处理了吗?审查数据库转换行正确锁定了吗?另一个请求覆盖了状态吗?检查超时和重试超时并不总是意味着支付失败。有时提供商完成了它,而你的应用只是错过了响应。单独确认履行逻辑支付可能正确,而下游动作失败。不要将这些事件混淆。比较沙箱 vs 生产假设头名称、签名逻辑和事件时机往往不同。与提供商仪表板或 API 对账如果你的数据库和提供商不同意,你的系统需要恢复路径。

常见问题

我应该在返回 URL 上标记订单为已支付吗?

不。将返回 URL 用于 UX。使用 webhook 验证和服务器端状态检查作为支付真相。

如果 webhook 在用户返回站点前到达怎么办?

这是正常的。你的系统应干净处理它。前端可以从你的后端获取最新状态。

小型应用需要队列吗?

不总是,但一旦支付确认触发邮件、发票、库存更新或配置,即使小应用也会从解耦中受益。

我应该从支付提供商存储什么?

存储交易引用、状态、金额、货币、时间戳和选定的响应元数据,有助于调试。避免存储敏感秘密或不必要的原始个人数据。

如何防止重复处理?

使用幂等处理程序、适当的唯一约束和受控状态转换。

最终想法

PHP 中的支付集成主要不是关于发送 HTTP 请求。它是围绕不确定性构建可靠系统。

网关可能重试。用户可能消失。回调可能延迟到达。你的服务器可能在最糟糕的时刻超时。这些都不罕见。这是工作。

好消息是核心原则是稳定的:

  • 将支付视为状态转换,而不是一次性表单提交
  • 信任服务器到服务器验证,而不是浏览器
  • 验证签名并验证每个重要输入
  • 为重复事件和重试设计
  • 保持日志有用且安全
  • 分离结账、支付、webhook 和履行关注点
  • 在上线前测试延迟、重复和失败流程

一个实用的下一步:审查你当前的支付代码,并跟踪从结账创建到最终状态更新的一个交易。如果你无法清楚看到真相在哪里建立、重复在哪里处理,以及失败如何调试,那就是首先要修复的东西。

最新文章

随机文章

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