121808-修复Mex模块MyHandler除零错误.md 2.2 KB

修复Mex模块MyHandler除零错误

任务时间

  • 开始时间:2025年06月12日 18:08:10 CST
  • 完成时间:2025年06月12日 18:09:00 CST

问题描述

在处理Mex模块的获取我的挂单请求时,发生了除零错误(Division by zero),导致请求返回500错误。

错误信息

[2025-06-12T18:07:31.329446+08:00] laravel.ERROR: Division by zero {"exception":"[object] (DivisionByZeroError(code: 0): Division by zero at /var/www/html/app/Module/AppGame/Handler/Matchexchange/MyHandler.php:62)"}

问题分析

  1. 错误发生在 MyHandler.php 第62行:$lastPage = ceil(($result['total'] ?? 0) / $pageSize);
  2. 当客户端请求中只传递了 page 参数而没有传递 perPage 参数时,$page->getPerPage() 返回0
  3. 原有的限制逻辑 $pageSize = min($pageSize, 100); 没有防止 $pageSize 为0的情况
  4. 导致在计算 $lastPage 时发生除零错误

修复方案

修改分页参数处理逻辑,确保 $pageSize 最小值为1:

修改前:

// 限制分页大小
$pageSize = min($pageSize, 100);
$pageNum = max($pageNum, 1);

修改后:

// 限制分页大小,确保不为0
$pageSize = max(min($pageSize, 100), 1);
$pageNum = max($pageNum, 1);

验证结果

使用命令 php artisan debug:reproduce-error request_1749722768045 进行验证:

  • 修复前:返回500错误,日志显示除零异常
  • 修复后:返回200成功,正常返回分页数据

验证响应数据:

{
  "runUnid": "684aa73a9692c",
  "runMs": "183",
  "code": "OK",
  "callpath": "Matchexchange-My",
  "lastData": [],
  "matchexchangeMy": {
    "page": {
      "currentPage": "1",
      "perPage": "1",
      "hasMore": true,
      "lastPage": "2",
      "total": "2"
    }
  }
}

涉及文件

  • app/Module/AppGame/Handler/Matchexchange/MyHandler.php

Git提交

  • 提交哈希:1616fad9
  • 提交信息:修复Mex模块MyHandler中的除零错误

总结

成功修复了Mex模块中获取我的挂单功能的除零错误,通过增强分页参数验证逻辑,确保了系统的稳定性和健壮性。修复后的代码能够正确处理各种分页参数情况,避免了类似的异常发生。