船说 CMS 静态页面生成失败怎么解决
照着这篇排查一遍,你就能定位船说 CMS 静态页面生成失败的具体原因,并把首页、栏目页、内容页重新生成出来。
船说 CMS 生成静态页时的报错往往只有一句「生成失败」或者干脆页面卡住不动,真正的原因通常藏在权限、PHP 限制、模板标签和 Web 服务器配置这四类里。下面按「先定位、再逐项排除」的顺序来。
第一步:先确认失败卡在哪个环节
这一步要弄清楚是「首页失败」「某个栏目失败」还是「内容页失败」,因为不同环节对应的排查方向完全不同。进入后台,打开左侧菜单「生成」→「生成管理」(部分版本叫「静态管理」),页面上会列出首页、栏目、内容三个生成入口。
先只点「更新首页」。如果首页能成功,说明 PHP 环境和目录权限没问题,问题出在具体栏目的模板或数据上;如果首页也失败,跳到第二步。
注意:不要一上来就点「一键生成全部」。几万条内容一起生成,超时中断后你根本分不清是哪一条挂掉的。
第二步:查静态目录的属主和权限
这一步要保证 PHP 运行用户对静态输出目录有写权限。用 SSH 登录服务器,先确认目录存在:
ls -ld /www/wwwroot/你的域名/html
如果提示 No such file or directory,先在后台「系统设置」→「站点设置」→「静态文件目录」里确认配置的路径,再到服务器上 mkdir -p 建出来。接着把属主改成 PHP-FPM 的运行用户(宝塔面板一般是 www):
chown -R www:www /www/wwwroot/你的域名/html
chmod -R 755 /www/wwwroot/你的域名/html
同时顺手看一眼磁盘是不是满了:
df -h
df -i
df -i 显示 inode 使用 100% 时,同样会写不进文件,这种情况下删掉 runtime 目录里的旧日志和缓存即可。
第三步:调大 PHP 的执行时间和内存
内容页多、模板里带远程图片抓取时,最容易撞上 Maximum execution time exceeded 或 Allowed memory size exhausted。进入宝塔面板「软件商店」→ 已安装的 PHP(如 PHP 7.4)→「设置」→「配置修改」,改这两项:
max_execution_time = 300
memory_limit = 256M
保存后回到「服务」页点「重启」,或在 SSH 里执行:
systemctl restart php-fpm-74
改完再回后台试一次生成单个栏目。如果仍然中断,把 max_execution_time 继续加到 600 试试。
第四步:看日志定位到具体模板
船说 CMS 的报错会写进 runtime/log/ 目录,按日期命名。执行:
tail -n 50 /www/wwwroot/你的域名/runtime/log/$(date +%Y%m)/$(date +%d).log
日志里出现 syntax error、unclosed tag、Undefined index 这类字样时,说明模板标签写错了。常见问题有三种:{if} 没有对应的 {/if}、列表标签里的字段名写错、模板文件存成了 GBK 编码。用编辑器把模板另存为「UTF-8 无 BOM」,再逐条核对标签闭合。
注意:模板改错后要先到后台「系统」→「缓存管理」点「清除缓存」,否则改完也不生效。
第五步:确认伪静态和服务器配置
生成成功后访问栏目页却是 404,说明文件生成了但没被访问到。检查 Nginx 站点配置里是否带了船说的伪静态规则,宝塔面板路径是「网站」→ 你的站点→「设置」→「伪静态」,选择 chuanshuo 或直接粘贴官方规则。改完点「保存」会自动 reload。
同时确认站点根目录指向的是程序根目录,而不是 public 子目录——静态文件默认生成在根目录下的 html 文件夹里。
第六步:单条生成做最终验证
回到「生成管理」,先点「更新首页」,再点某个栏目的「更新栏目」,最后挑一条内容点「更新内容」。三个都成功后,再点「一键生成」跑全站。浏览器无痕窗口打开首页和栏目页,查看源代码里是否有真实内容,而不是跳转脚本。
小结
- 先单点首页,判断是环境问题还是数据问题
- 静态目录属主必须是 PHP 运行用户,权限 755,
df -i也要看 max_execution_time调到 300 以上、memory_limit调到 256M- 报错详情在
runtime/log/里,按行号找模板标签 - 改完模板必须清缓存,生成后必须检查伪静态规则
原文链接:https://www.gj0.com/thread-511.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。