在处理 request_1749718293522 请求时,app/Module/AppGame/Handler/Matchexchange/ListHandler.php 第65行发生除零错误:
[2025-06-12T17:05:58.489442+08:00] laravel.ERROR: Division by zero {"exception":"[object] (DivisionByZeroError(code: 0): Division by zero at /var/www/html/app/Module/AppGame/Handler/Matchexchange/ListHandler.php:65)"}
ListHandler.php 第65行 $lastPage = ceil(($result['total'] ?? 0) / $pageSize);page.per_page 字段未设置,导致默认值为0请求数据:
{
"requestUnid": "request_1749718293522",
"matchexchangeList": {
"itemId": "3",
"page": {
"page": "1"
}
}
}
注意:page 对象中只有 page 字段,缺少 per_page 字段
在处理分页参数时增加有效性检查,确保 $pageSize 不为0:
// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;
// 限制分页大小
$pageSize = min($pageSize, 100);
$pageNum = max($pageNum, 1);
// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;
// 确保分页参数有效,防止除零错误
$pageSize = $pageSize > 0 ? $pageSize : 20;
$pageNum = $pageNum > 0 ? $pageNum : 1;
// 限制分页大小
$pageSize = min($pageSize, 100);
$pageNum = max($pageNum, 1);
使用重放命令验证修复效果:
php artisan debug:reproduce-error request_1749718293522
响应正常:
{
"runUnid": "684a994dea0b9",
"runMs": "234",
"code": "OK",
"callpath": "Matchexchange-List",
"lastData": [],
"matchexchangeList": {
"page": {
"currentPage": "1",
"perPage": "20"
},
"price": {
"itemId": "3",
"minPrice": 10.5,
"maxPrice": 25.8
}
}
}
protophp/Uraus/Kku/Common/RequestPage.php,per_page 字段的默认值为0per_page 为0或负数时,使用默认值20修复Matchexchange ListHandler除零错误
- 问题:当客户端请求中page.per_page字段未设置时,默认值为0导致除零错误
- 修复:在处理分页参数时增加有效性检查,确保pageSize不为0
- 测试:使用php artisan debug:reproduce-error验证修复有效
app/Module/AppGame/Handler/Matchexchange/ListHandler.php通过增加分页参数的有效性检查,成功修复了除零错误。这是一个典型的防御性编程实践,确保在处理外部输入时进行必要的验证。