第一步:基础检查(90%的问题出在这里)
请按顺序检查以下三点,这三点解决了90%的验证码不显示问题。

(图片来源网络,侵删)
检查 GD 库是否开启
验证码图片是服务器动态生成的,这需要 PHP 的 GD 库支持,GD 库是一个开源的图形处理库,PHP 默认可能没有开启它。
如何检查和开启:
-
检查方法:
- 在你的网站根目录下创建一个名为
info.php的文件。 - 在文件中输入
<?php phpinfo(); ?>并保存。 - 在浏览器中访问
你的域名/info.php。 - 在打开的页面中,按
Ctrl + F搜索gd。 - 如果看到类似
GD Support=>enabled的字样,说明 GD 库已开启,如果显示disabled,则说明未开启。
- 在你的网站根目录下创建一个名为
-
解决方法:
(图片来源网络,侵删)- 自己有服务器/虚拟主机权限: 编辑你的
php.ini配置文件(通常在/etc/php/或虚拟主机根目录下),找到;extension=gd这一行,去掉前面的分号 ,改为extension=gd,然后保存文件,并重启你的 Web 服务器(如 Apache 或 Nginx)。 - 使用虚拟主机(没有服务器权限): 你需要联系你的虚拟主机服务商,让他们帮你开启 GD 库,这是最常见的原因之一。
- 自己有服务器/虚拟主机权限: 编辑你的
检查验证码目录权限
织梦生成验证码图片后,会保存在一个指定的目录里,如果这个目录没有写入权限,服务器就无法创建图片,验证码自然也就显示不出来。
如何检查和修复:
- 检查目录: 验证码图片通常保存在
/data/目录下,请确保这个目录存在。 - 修复权限:
- Linux 服务器: 使用 FTP 客户端或 SSH 连接到服务器,将
/data/目录的权限设置为 755,目录下文件的权限设置为 644,如果还不行,可以尝试将目录权限设置为 777(仅作为临时测试,不安全,问题解决后请改回755)。 - Windows 服务器: 确保 IIS 或 Apache 对该目录有“写入”和“读取”的权限。
- Linux 服务器: 使用 FTP 客户端或 SSH 连接到服务器,将
检查 /data 目录下的 safe 文件
织梦为了安全,会在 /data/ 目录下生成一个名为 safe 的文本文件(有时也可能是 safe.txt 或 safe.inc.php),这个文件用于存储一些关键的安全信息,如果这个文件丢失、损坏或内容不正确,会导致很多功能异常,包括验证码。
如何检查和修复:

(图片来源网络,侵删)
- 检查: 通过 FTP 查看
/data/目录下是否存在safe文件。 - 修复:
- 如果文件不存在,从你的织梦程序安装包里找到这个文件,上传到
/data/目录下。 - 如果文件存在,用文本编辑器打开它,内容应该是一行代码,类似
define('DEDE_SECURITY', '你的安全码');。 - 最简单的方法: 删除这个
safe文件,然后重新登录你的织梦后台,织梦系统会自动重新生成一个正确的safe文件,这是最常用且有效的修复方法。
- 如果文件不存在,从你的织梦程序安装包里找到这个文件,上传到
第二步:进阶排查(如果第一步没解决)
如果以上三点都确认无误,但验证码仍然不显示,请继续排查以下问题。
检查 session 是否正常
验证码的生成和验证依赖于 PHP 的 Session 机制,Session 无法正常工作,验证码也无法显示。
- 检查方法:
- 检查你的
php.ini文件中session.save_path的配置路径是否存在且有写入权限,这个路径通常是/tmp或/var/lib/php/sessions,确保这个目录存在并且权限正确(通常是 755 或 777)。 - 检查前台和后台的
common.inc.php文件中,Session 的代码是否被注释或修改,通常文件开头会有session_start();,确保它没有被注释掉。
- 检查你的
检查 seccode.php 文件本身
这个文件是生成验证码的核心文件。
- 检查文件是否存在: 确认你的网站根目录下是否存在
/include/vdimgck.php或/plus/seccode.php(不同版本路径可能略有差异,通常是vdimgck.php)。 - 检查文件内容: 用文本编辑器打开这个文件,查看最后一行是否是
?>,这个文件末尾可能会有多余的空格、换行或输出字符,这会导致 PHP 在发送图片数据之前就输出了内容,从而破坏图片流,确保文件除了代码外,没有其他任何输出,并且以?>甚至可以尝试直接删除?>结尾符)。
检查浏览器缓存和 Cookie
- 浏览器缓存: 尝试强制刷新浏览器(
Ctrl + F5或Cmd + Shift + R),或者清除浏览器缓存和 Cookie 后再试。 - Cookie: 验证码依赖 Cookie 来传递 Session ID,检查你的浏览器是否阻止了网站的 Cookie,可以尝试在浏览器的无痕/隐私模式下访问,看是否正常。
检查模板调用
确认你的登录表单或其他需要验证码的地方,正确调用了验证码。
- 检查标签: 在你的登录模板文件(如
login.htm)中,应该有类似这样的代码:<img src='{dede:global.cfg_cmspath/}/include/vdimgck.php' id='validateimg'>确保这个
src路径是正确的,并且指向了你服务器上的vdimgck.php文件。
第三步:终极解决方案(重置验证码功能)
如果以上所有方法都试过了还是不行,可以尝试这个“大招”。
重新生成验证码文件
文件本身可能出现了未知的损坏。
- 备份: 强烈建议你先备份整个网站,特别是
/data和/include目录。 - 下载新版文件: 去织梦官网下载一个与你当前版本完全相同的官方程序包。
- 替换文件: 用官方程序包里的
include/vdimgck.php文件,覆盖掉你网站上的同名文件。 - 清除缓存: 登录织梦后台,进入【系统】->【系统基本参数】->【性能选项】,点击【清除系统缓存】。
总结与排查流程
当你遇到验证码不显示的问题时,请按照以下流程操作:
- 先查 GD 库 (
phpinfo.php)。 - 再查目录权限 (
/data/目录)。 - 然后检查
safe文件 (删掉让它自动重生成)。 - 如果还不行,检查 Session 配置 (
session.save_path)。 - 检查
vdimgck.php文件 (确保无多余输出)。 - 清理浏览器缓存和 Cookie。
- 用官方新文件覆盖
vdimgck.php并清空后台缓存。
按照这个流程,绝大多数织梦验证码不显示的问题都能得到解决,祝你成功!
