织梦CMS迁移新版服务器,兼容PHP版本问题
织梦CMS(DedeCMS)迁移到新版服务器时,最常见的拦路虎就是PHP版本不兼容。
很多老站原来跑在PHP 5.6甚至更低版本,换到新服务器后默认PHP 7.x或8.x,页面直接白屏、后台报错或功能失效。
这篇文章会从环境确认、兼容处理到验证,一步步帮你把网站恢复起来,适合刚接触服务器迁移的站长或运维新手。
先确认新服务器上的PHP版本和织梦版本
迁移前必须搞清楚两边的环境差异,否则后面都是瞎折腾。
- 查看旧服务器PHP版本:在旧站根目录建一个
phpinfo.php,内容写,浏览器访问后看顶部PHP Version。 - 查看织梦版本:登录旧站后台,右下角或“系统”->“系统信息”里会显示DedeCMS版本号,比如 V5.7 SP2。
- 查看新服务器PHP版本:如果用的是宝塔面板,进入“网站”->对应站点->“PHP版本”就能看到;命令行可以执行
php -v。
判断条件: 织梦V5.7及更早版本官方只兼容到PHP 5.6,直接上PHP 7.4以上大概率报错。
如果新服务器无法降级PHP,就需要对程序做兼容修补。
处理PHP版本不兼容的两种思路
方案一:降级PHP版本(最省事)
如果新服务器允许安装多个PHP版本,优先把站点切到PHP 5.6或7.0。
宝塔面板操作路径:软件商店 -> 安装PHP 5.6 -> 网站 -> 站点设置 -> PHP版本 -> 选择5.6 -> 保存。
注意: 部分新系统(如Ubuntu 22.04)默认软件源已移除PHP 5.6,需要手动编译或换用其他面板,建议以官方文档为准。
方案二:修补织梦程序兼容PHP 7+
无法降级时,需要修改核心文件。
操作前务必全站备份。
常见报错及修复:
- 后台登录提示“Deprecated: mysql_connect()”
织梦默认用 mysql_* 函数,PHP 7已移除。
需要替换为 mysqli_*。
打开 include/common.inc.php,找到 $link = mysql_connect(...) 改为 $link = mysqli_connect(...),并同步修改 mysql_select_db、mysql_query 等。
更稳妥的做法是使用社区维护的兼容补丁包。
- 前台报错“Call to undefined function mysql_query()”
同样是因为数据库函数不兼容。
可以下载针对PHP 7的织梦补丁,覆盖 include 目录下的数据库类文件。
- 页面出现“preg_replace(): The /e modifier is no longer supported”
找到报错文件行,将 preg_replace 的 /e 修饰符改为 preg_replace_callback。例如原代码:
preg_replace('/abc/e', 'strtolower("$1")', $str)
改为:
preg_replace_callback('/abc/', function($m){ return strtolower($m[1]); }, $str)
- 后台验证码不显示
PHP 7.4后GD库或Session配置变化,检查 php.ini 中 session.save_path 是否有写入权限,并确保GD扩展已开启。
关键结论: 如果修改核心文件后仍有大量报错,建议直接使用织梦官方或社区发布的PHP 7兼容版本,避免陷入无休止的修补。
迁移后必须验证的四个位置
改完代码不代表万事大吉,按下面清单逐项检查:
- 前台首页:打开网站,看是否正常显示,有无乱码或空白。
- 后台登录:输入账号密码,看能否进入,验证码是否正常。
- 文章发布:尝试发布一篇测试文章,看是否写入数据库并正常显示。
- 数据库连接:在后台“系统”->“数据库备份/还原”里执行一次备份,确认数据库读写正常。
如果以上都通过,说明迁移基本成功。
容易踩坑的几个细节
- 文件权限:新服务器上
data、uploads等目录需要Web用户可写,宝塔面板可一键设置权限为755,所有者www。 - 伪静态规则:如果旧站用了伪静态,新服务器Nginx或Apache需要重新配置,否则内页404。
- 缓存残留:迁移后先清空
data/cache和data/tplcache目录,避免旧缓存导致页面错乱。 - 编码问题:数据库导出时选择UTF-8,导入新库也保持UTF-8,否则中文会乱码。
常见疑问
问:织梦迁移后后台登录一直提示“验证码错误”怎么办?
答:检查 data/session 目录是否存在且可写,同时确认PHP的session配置正确,宝塔面板可在PHP设置里调整。
问:PHP 8.0能跑织梦吗?
答:官方版本不支持,需要大量修改,不建议生产环境使用。如果必须用PHP 8,考虑换用其他CMS或找专业兼容版本。
问:迁移后图片不显示,路径都正确?
答:检查数据库里附件路径是否还指向旧域名,可以用SQL批量替换:UPDATE dede_archives SET litpic=REPLACE(litpic,'旧域名','新域名'); 同时替换文章正文中的链接。
问:不想改代码,有没有更简单的办法?
答:如果服务器支持Docker,可以拉取PHP 5.6的镜像单独跑织梦,但需要一定运维基础。
迁移织梦CMS遇到PHP版本问题,核心就是先确认版本差异,再选择降级或修补。
修补时优先用社区补丁,改完务必验证前台、后台和数据库。
如果这篇文章帮你解决了问题,后续遇到其他迁移报错,也可以按“看报错、查函数、改配置”的思路来排查。