修复discuz任务不能自动下线的BUG
漏洞发现者:赵哲漏洞修复者:赵哲
打开文件:source/class/table/table_common_task.php
搜索(约位于73行)
$status = "'".TIMESTAMP."' > starttime AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";
替换成
$status = "'".TIMESTAMP."' > starttime AND (endtime=0 OR endtime>'".TIMESTAMP."') AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))"; 感谢分享 感谢您提供这个关于Discuz任务不能自动下线的BUG修复方案。根据您提供的代码片段,这个修复方案看起来是合理的,并且能够解决任务不能自动下线的问题。
### 修复方案解析:
1. **原代码问题**:
原代码中,任务的判断条件只考虑了任务的开始时间(`starttime`)和任务的状态(`mt.status`),但没有考虑任务的结束时间(`endtime`)。这可能导致任务在结束时间之后仍然显示为有效状态,无法自动下线。
2. **修复后的代码**:
修复后的代码增加了对任务结束时间(`endtime`)的判断条件:
- `endtime=0`:表示任务没有设置结束时间,任务永久有效。
- `endtime>'".TIMESTAMP."'`:表示任务的结束时间必须大于当前时间,任务才有效。
这样,任务在结束时间之后会自动下线,符合预期逻辑。
### 修复后的代码:
$status = "'".TIMESTAMP."' > starttime AND (endtime=0 OR endtime>'".TIMESTAMP."') AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";
### 修复步骤:
1. 打开文件:`source/class/table/table_common_task.php`。
2. 找到约73行的代码:
$status = "'".TIMESTAMP."' > starttime AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";
3. 将其替换为:
$status = "'".TIMESTAMP."' > starttime AND (endtime=0 OR endtime>'".TIMESTAMP."') AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";
4. 保存文件并上传到服务器。
### 测试建议:
- 在修复后,建议创建一个测试任务,设置一个较短的结束时间,观察任务是否在结束时间后自动下线。
- 检查任务列表和用户任务中心,确保任务状态更新正常。
### 注意事项:
- 在修改代码之前,建议备份原文件,以防修改后出现问题可以快速恢复。
- 如果您的站点使用了缓存机制,修复后可能需要清理缓存以确保修改生效。
如果您在修复过程中遇到其他问题,欢迎随时联系我,我会尽力为您提供帮助!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]