最近发现一个 DedeCMS 做的网站,在后台执行 更新文档HTML 功能时,生成的html文档不全,有一部分页面没有生成或者更新。
在生成的时候,没有任何错误提示,生成是执行完毕了,但是查看出问题的部分文档发现文件生成时间没有变化,对模板做出的修改也没有更新。
经过检查发现是 DedeCMS 的一处 bug ,在 /dede/makehtml_archives_action.php 里面的86行的代码:
//如果生成数量大于500,并且没选栏目,按栏目排序生成
if($totalnum > 500 && empty($typeid))
{
$dsql->Execute('out',"SELECT id FROM `dede_arctiny` $idsql ORDER BY typeid ASC $limitSql");
} else {
$dsql->Execute('out',"SELECT id FROM `dede_arctiny` $idsql $limitSql");
}
这里如果生成数量如果大于500的话,会根据栏目进行排序同时再结合 limitsql 限制就会导致更新不到全部的文档,有部分文档会被略过。
解决办法就是注销这个判断,直接使用下面的语句。
//直接使用else内的语句
$dsql->Execute('out',"SELECT id FROM `dede_arctiny` $idsql $limitSql");
//注销下面的语句
/*if($totalnum > 500 && empty($typeid))
{
$dsql->Execute('out',"SELECT id FROM `dede_arctiny` $idsql ORDER BY typeid ASC $limitSql");
} else {
$dsql->Execute('out',"SELECT id FROM `dede_arctiny` $idsql $limitSql");
}*/
保存文件后,再次重新生成,所有的文档都已经完美生成,原来出问题的文档已经被更新。