织梦文档无法保存是什么原因
在织梦DedeCMS后台编辑文章时,点击保存却毫无反应,或者保存后正文为空、标题丢失,这类问题在高版本PHP环境或迁移服务器后尤为常见。下面从权限、数据库、安全函数、字段限制四个维度系统排查。
一、问题现象与常见诱因
文档无法保存通常表现为以下几种形式,每种现象对应不同的故障点:
- 点击保存按钮后页面无任何跳转,停留在原编辑界面。
- 保存成功但正文 body 字段为空,只有标题被写入。
- 弹出空白页或 500 内部服务器错误。
- 提示“你输入的内容存在危险字符”或“数据校验失败”。
二、目录写入权限不足
1. 排查 uploads 与 data 目录
织梦在保存文档时会同步处理缩略图、远程图片本地化、附加信息缓存,这些操作依赖 /uploads/allimg/、/uploads/litimg/ 以及 /data/ 目录可写。若权限为只读,保存流程会在中途中断。
# Linux 下递归赋予写入权限
chmod -R 755 /uploads /data
chown -R www:www /uploads /data
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 安全函数被禁用
织梦保存文档时依赖 fsockopen、get_cfg_var、mb_convert_encoding 等函数。若宝塔或 php.ini 中禁用了这些函数,会在保存含远程图片的文章时报错。
- 进入宝塔“软件商店”→ PHP 设置 → 禁用函数列表。
- 删除
fsockopen、get_cfg_var、mb_convert_encoding、proc_open。 - 重启 PHP 服务后重新保存文档。
五、内容含敏感字符被过滤
织梦内置了危险关键字过滤,存放在 /data/security/inc_safe_config.php。若文章正文中包含该列表中的词汇(如部分 SQL 关键字、特定标签),保存会被拦截。
// 查看并适度精简过滤规则
$cfg_disable_filter=array('select','union','sleep', ...);
建议只保留 SQL 注入相关的高危词,移除与正文写作冲突的常见词。
六、后台表单 token 校验失败
登录态过期或浏览器缓存了旧版编辑页时,提交的 csrf token 与服务端不匹配,导致保存被静默拒绝。处理方式:清空浏览器缓存、重新登录后台、关闭编辑页多开标签。
七、按现象快速定位
- 正文丢失、标题在 → 查 body 字段类型与编码。
- 完全无反应 → 查权限、session、PHP 函数。
- 提示危险字符 → 查过滤规则。
- 500 报错 → 查 PHP 错误日志
/data/logs/或宝塔错误日志。
common.inc.php 临时设置 $cfg_debug=TRUE;,可在页面底部看到具体报错行。给站长的操作建议
遇到文档无法保存先别急着改代码,按“权限 → 数据库 → 安全函数 → 过滤规则”的顺序逐步验证,每改一项就测试一次保存,能快速锁定真正诱因。日常运维中建议每月检查一次目录权限与 PHP 禁用函数清单,迁移服务器或升级 PHP 版本后,务必用一篇含图片的长文做保存回归测试,把隐患挡在内容上线之前。