我的网站是sdcms只上传了100度篇文章就不再生成了有时生成内容只

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
郭韵强

网站  2026-09-10 16:48:02   234

我的网站是sdcms只上传了100度篇文章就不再生成了有时生成内容只

我的网站用的就是sdcms,之前一直挺顺的,传了大概一百多篇文章之后,突然就卡住了。点后台的“生成”按钮,有时候能出来几篇,有时候一篇都不出,进度条走到一半就停住,页面也不报错,就干等。我一开始以为是服务器抽风,重启了两次,没用。后来把生成范围缩小到单篇文章,发现有的能生成,有的点了没反应。折腾了两天,总算摸清楚几个原因,写下来给同样用sdcms的朋友避坑。

先查服务器资源。sdcms生成静态页是PHP在跑循环,文章一多,每次生成都要读数据库、解析模板、写文件。我看了下PHP配置,max_execution_time只有30秒,memory_limit是128M。一百多篇文章,如果一次性全生成,到后面肯定超时。表现就是生成到某篇突然停住,后台没提示,因为PHP超时后进程被杀了,但前端还在等。把这两个值改成300秒和256M,情况好转,但偶尔还是会卡。后来发现sdcms本身有个生成数量限制,在系统设置里有个“每次生成文章数”,默认可能是50或者100。我改成20,分批点,就稳了。所以如果你也遇到生成到一定数量就不动,先看这两个地方。

第二个坑是数据库。sdcms的文章表、栏目表、附件表之间有外键关联。我传文章的时候,有几篇是从别的站复制过来的,里面带了特殊字符,比如英文引号或者反斜杠。生成的时候模板解析到这些字符,PHP直接报错,但sdcms的错误日志没开,前台就表现为“只生成一半”或者卡住。我打开调试模式,看到报错是“Supplied argument is not a valid MySQL result”,查了半天,发现是文章内容里有个单引号没转义,把SQL语句截断了。解决办法就是进数据库,把这几篇文章的content字段里的特殊符号手动改掉,或者用sdcms自带的“内容替换”功能批量过滤。

还有一个常见问题是文件权限。sdcms生成静态页要往根目录或者html文件夹写文件。如果服务器是Linux,文件夹权限是755,文件是644,那没问题。但我有一次迁移服务器,文件夹所有者变成了root,PHP以www用户跑,没权限写,生成时就会静默失败。表现就是进度条走完,但文件没更新。你用FTP或者SSH看一眼生成目录的时间戳,如果还是旧的,那就是权限问题。chown -R www:www 你的目录,再chmod -R 755,基本能解决。

模板标签也会导致“只生成内容只”。比如你模板里调用了{dede:arclist}或者sdcms自己的{loop}标签,如果标签里的typeid写错了,或者limit参数太大,生成时就会陷入死循环。我有个栏目页模板,里面调用了所有子栏目的文章,结果子栏目有100多个,每生成一篇文章都要遍历一遍,时间全耗在数据库查询上。后来把标签里的limit改成10,并且加上缓存,生成速度立刻上来了。所以检查一下你的模板,特别是首页和列表页,有没有那种“查全部”的标签。

最后说个sdcms自身的机制问题。sdcms有个“生成队列”的概念,你点生成后,任务会加到队列表里,由计划任务或者手动触发来跑。如果队列表满了,或者之前有失败的任务卡在那里,新任务就进不去。我遇到过就是队列表里有一条状态是“处理中”的记录,一直没结束,导致后面所有生成都排队等它。解决办法是进数据库,找到sdcms_queue或者类似的表,把状态为0或者1的僵尸记录删掉,然后重新生成。

总结一下,sdcms上传一百多篇文章后不生成,多半不是sdcms本身坏了,而是资源、数据库、权限、模板、队列这几个地方出了小毛病。你按顺序排查:先看PHP超时和内存,再看生成数量设置,然后查数据库特殊字符,接着看目录权限,再检查模板标签,最后清空队列表。我最后是把每次生成数改成10,PHP超时设成600秒,内存给到512M,又把文章内容里的英文引号全部替换成中文引号,现在生成两千多篇都没再卡过。如果你也卡在100篇左右,不妨从这几个方向试试,别急着换CMS,多半是配置问题。