织梦dedecms数据量大生成栏目缓慢以及出现500错误一个可能原因及解决方法
发布日期:2018/1/15 17:05:30
后台数据量小的时候,栏目及文档生成很快,但是当织梦cms系统数据量曾大以后,生成目录就会越来越慢,直至发生500内部服务器错误。
产生错误的原因是数据库数据量太大,生成时间太长导致超时错误。解决的办法是分批次生成。记得早期的织梦后台是分批次更新的,但不知为什么新版本没了这个功能。
通过查看代码发现分批次生成的代码被注释掉了,至于注释掉的原因不得而知。
 
一、在后台管理文件夹下找到makehtml_list_action.php 文件
在makehtml_list_action.php 的文件行 101 处
  //$lv->CountRecord();
  有这样一处注释掉的代码,似乎DEDECMS的开发工程师因为其他原因注释掉了这行代码,这就导致了计算某个栏目类有多少分页的代码不能运行,从而导致后面一行
 
  if($lv->TypeLink->TypeInfos[‘ispart’]==0 && $lv->TypeLink->TypeInfos[‘isdefault’]!=-1) $ntotalpage = $lv->TotalPage;
else $ntotalpage = 1;
 
  导致这里面的 $ntotalpage 根本得不到值 (NULL),
  因为 $lv->TotalPage 是在$lv->CountRecord 函数里面赋值
  所以分批次生成的功能不能运行。
 
  从而想到,取消此处注释,让栏目生成HTML 分批进行
 
//如果栏目的文档太多,分多批次更新
    if($ntotalpage <= $maxpagesize || $lv->TypeLink->TypeInfos['ispart']!=0 || $lv->TypeLink->TypeInfos['isdefault']==-1)
    {
        $reurl = $lv->MakeHtml('', '', $isremote);
        $finishType = TRUE;
    }
    else
    {
// 让代码进入此执行才是分批生成html
        $reurl = $lv->MakeHtml($mkpage, $maxpagesize, $isremote);
        $finishType = FALSE;
        $mkpage = $mkpage + $maxpagesize;
        if( $mkpage >= ($ntotalpage+1) ) $finishType = TRUE;
    }