织梦页面空白是什么原因

织梦 DedeCMS 出现整页空白(白屏)是常见的故障表现,可能发生在首页、栏目页、内容页,也可能只发生在后台。白屏的根因绝大多数是 PHP 抛出了致命错误但被 display_errors 隐藏,本文按"快速定位 → 分类排查 → 修复"的顺序展开。

一、第一步:让真实错误显示出来

织梦默认在生产模式下关闭错误显示,所以一报错就是白屏。最快的定位方式是临时开启错误显示:

方法 1:修改 /include/common.inc.php 顶部加入:

error_reporting(E_ALL);
ini_set('display_errors','On');

方法 2:在根目录新建 test.php,内容:

<?php
include 'include/common.inc.php';
echo 'OK';
?>

访问 test.php,能直接看到错误信息。排查完记得删除该文件。

方法 3:查看 PHP 错误日志(推荐,不影响线上):

tail -f /var/log/php_errors.log
# 或宝塔:网站 → 设置 → 错误日志

二、常见白屏原因

1. PHP 版本不兼容

PHP 7+ 移除了 mysql_* 函数,PHP 8 移除了 eachcreate_function,老织梦直接报 Fatal error。

2. 模板文件缺失或语法错误

模板里调用不存在的标签、缺少结束标签 {/dede:xxx},织梦编译模板时崩溃。

3. 数据库连接失败

common.inc.php 配置错误、数据库密码改了没同步、MySQL 服务挂了。

4. 内存溢出

采集或生成大批量静态页时 Allowed memory size exhausted

5. 文件被 BOM 污染

用记事本编辑过 common.inc.phpconfig.cache.inc.php,文件头多了 BOM 字符,导致 session_start 报 "headers already sent"。

6. 缓存损坏

/data/cache/ 里的 .inc 文件损坏,反序列化失败。

7. .htaccess/Nginx 规则把请求转发到了不存在的文件

这种白屏其实是 404 被规则吃掉,看起来像白屏。

三、按场景分类排查

1. 仅首页白屏,其他页正常

检查 /templets/default/index.htm 模板是否完整、是否有最新修改;/index.php 是否被覆盖;首页静态文件 /index.html 是否过期。

2. 仅内容页白屏

检查 /templets/default/article_article.htm;正文里是否有特殊字符(如未闭合的 {dede:field name='body'/});附加表 dede_addonarticle 是否损坏。

3. 仅后台白屏

多数是 PHP 版本问题或 /dede/inc/inc_menu.php/dede/login.php 文件缺失。

4. 全站白屏

优先怀疑 common.inc.php、include/common.inc.php、数据库连接、PHP 服务。

技巧:diff -r 原版包 当前站点 能快速找出被改动的文件,定位人为破坏。

四、典型修复方案

1. PHP 版本不兼容

降级到 PHP 5.6 或 7.4;或升级织梦到 V5.7 SP3+,并把 mysql_* 替换为 mysqli_*。

2. 模板语法错误

逐段注释模板代码定位错误行;用 DedeCMS 标签手册核对标签写法。

3. BOM 污染

用 Notepad++ 打开文件 → 编码 → 转为 UTF-8 无 BOM 编码 → 保存。

4. 缓存损坏

rm -rf /data/cache/*
rm -rf /data/sessions/*

然后刷新页面,织梦会重新生成缓存。

5. 内存溢出

修改 php.ini:

memory_limit=256M
max_execution_time=120

五、注意事项

1. 排查完成后立即把 display_errors 关闭,避免暴露路径。

2. 任何 PHP 文件修改都用 UTF-8 无 BOM 编辑器,杜绝记事本。

3. 升级 PHP 前先在测试环境验证织梦兼容性。

4. 定期备份 /data 整个目录,缓存和配置都在里面。

风险提醒:线上排查白屏时优先看 PHP 错误日志,不要在生产站点长时间开启 display_errors,错误信息会暴露绝对路径给攻击者。

织梦页面空白看似无从下手,其实只要打开错误显示或翻一下 PHP 错误日志,根因立刻水落石出。建议站长养成"看日志 → 改配置 → 清缓存 → 验证"的标准排错动作,而不是一遇到白屏就重装整站。把 PHP 版本、织梦版本、模板文件三者保持稳定对应关系,能从源头避免 90% 的白屏问题。