织梦文档无法保存是什么原因

织梦CMS文档保存故障排查

在织梦DedeCMS后台编辑文章时,点击保存却毫无反应,或者保存后正文为空、标题丢失,这类问题在高版本PHP环境或迁移服务器后尤为常见。下面从权限、数据库、安全函数、字段限制四个维度系统排查。

一、问题现象与常见诱因

文档无法保存通常表现为以下几种形式,每种现象对应不同的故障点:

二、目录写入权限不足

1. 排查 uploads 与 data 目录

织梦在保存文档时会同步处理缩略图、远程图片本地化、附加信息缓存,这些操作依赖 /uploads/allimg//uploads/litimg/ 以及 /data/ 目录可写。若权限为只读,保存流程会在中途中断。

# Linux 下递归赋予写入权限
chmod -R 755 /uploads /data
chown -R www:www /uploads /data
宝塔面板用户可在“文件”模块右键目录选择“权限”,勾选 755 并应用到子目录,所有者设为 www。

2. 检查 sessions 临时目录

PHP 的 session.save_path 若不可写,后台登录态会丢失,保存动作会被重定向到登录页,表现为“保存没反应”。在宝塔的 PHP 设置中查看 session 路径并确保可写。

三、数据库字段或编码问题

1. body 字段类型被修改

正常情况下 dede_addonarticle 表的 body 字段为 mediumtext。若被误改为 text,超长文章会因截断而保存失败。可通过 phpMyAdmin 执行:

ALTER TABLE `dede_addonarticle` MODIFY `body` MEDIUMTEXT;

2. 数据库编码不一致

当数据库为 utf8mb4 而织梦程序文件为 utf8 时,包含 emoji 或特殊符号的内容会写入失败。建议统一为 utf8mb4,并在 /data/common.inc.php 中确认连接编码:

$cfg_db_language='utf8mb4';

四、PHP 安全函数被禁用

织梦保存文档时依赖 fsockopenget_cfg_varmb_convert_encoding 等函数。若宝塔或 php.ini 中禁用了这些函数,会在保存含远程图片的文章时报错。

  1. 进入宝塔“软件商店”→ PHP 设置 → 禁用函数列表。
  2. 删除 fsockopenget_cfg_varmb_convert_encodingproc_open
  3. 重启 PHP 服务后重新保存文档。
不要一次性解除全部禁用函数,仅放开织梦必需项,避免弱化服务器整体安全。

五、内容含敏感字符被过滤

织梦内置了危险关键字过滤,存放在 /data/security/inc_safe_config.php。若文章正文中包含该列表中的词汇(如部分 SQL 关键字、特定标签),保存会被拦截。

// 查看并适度精简过滤规则
$cfg_disable_filter=array('select','union','sleep', ...);

建议只保留 SQL 注入相关的高危词,移除与正文写作冲突的常见词。

六、后台表单 token 校验失败

登录态过期或浏览器缓存了旧版编辑页时,提交的 csrf token 与服务端不匹配,导致保存被静默拒绝。处理方式:清空浏览器缓存、重新登录后台、关闭编辑页多开标签。

七、按现象快速定位

排查时优先开启织梦调试模式:在 common.inc.php 临时设置 $cfg_debug=TRUE;,可在页面底部看到具体报错行。

给站长的操作建议

遇到文档无法保存先别急着改代码,按“权限 → 数据库 → 安全函数 → 过滤规则”的顺序逐步验证,每改一项就测试一次保存,能快速锁定真正诱因。日常运维中建议每月检查一次目录权限与 PHP 禁用函数清单,迁移服务器或升级 PHP 版本后,务必用一篇含图片的长文做保存回归测试,把隐患挡在内容上线之前。