GD库未开启或未正确安装(最常见)
安全确认码(seccode.php)是使用 PHP 的 GD 库动态生成图片的,如果服务器环境没有开启 GD 库,或者 GD 库有问题,那么自然就无法生成图片。

如何排查和解决:
-
检查 GD 库是否开启:
- 在你的网站根目录下创建一个名为
info.php的文件。 - 在文件中输入以下代码:
<?php phpinfo(); ?>
- 在浏览器中访问
http://你的域名/info.php。 - 在页面中搜索
GD Support,如果该项显示为enabled,并且能看到GD Version,说明 GD 库是开启的,如果显示为disabled,则说明 GD 库未开启。
- 在你的网站根目录下创建一个名为
-
如何开启 GD 库(需要服务器权限):
- Linux (通过 cPanel/宝塔面板等): 通常在“软件管理”或“PHP 扩展”中找到 GD 库,点击“安装”或“启用”即可。
- Linux (手动编译安装): 在编译 PHP 时,需要加上
--enable-gd参数,如果已安装,可以尝试重新编译 PHP。 - Windows: 在
php.ini配置文件中找到;extension=gd这一行,去掉前面的分号 ,然后保存并重启 Apache 或 IIS 服务。
data 目录权限不足
DedeCMS 将验证码图片、缓存、配置文件等都存放在 data 目录下,Web 服务器进程(如 Apache 的 www-data,Nginx 的 nginx)需要对该目录有写入权限,才能生成并存储临时的验证码图片。
如何排查和解决:
-
设置正确的目录权限:
(图片来源网络,侵删)-
通过 FTP 或 SSH 连接到你的服务器。
-
找到网站根目录下的
data文件夹。 -
将其权限设置为 755,如果还是不行,可以尝试设置为 777(注意:777 权限存在安全风险,请在问题解决后立即改回 755)。
-
检查
data目录下的session目录,确保其权限也是 755 或 777。
(图片来源网络,侵删) -
Linux/Unix 命令行操作:
# 进入网站根目录 cd /path/to/your/dedecms # 设置 data 目录权限 chmod -R 755 data/
-
seccode.php 文件本身问题或被误删
生成验证码的核心文件是 /include/vdimgck.php(较新版本)或 /include/seccode.php(旧版本),如果这个文件丢失、损坏,或者文件内容被修改,也会导致验证码不显示。
如何排查和解决:
-
检查文件是否存在:
- 通过 FTP 或 SSH,确认
/include/vdimgck.php文件是否存在,如果不存在,你需要从 DedeCMS 的官方安装包中找到这个文件,重新上传到服务器的/include/目录下。
- 通过 FTP 或 SSH,确认
-
检查文件内容是否被篡改:
- 用文本编辑器(如 Notepad++, VS Code)打开
/include/vdimgck.php文件。 - 检查文件开头是否有异常的代码,比如黑客添加的木马代码,正常的文件开头应该是类似这样的:
<?php /* [DOCTYPE] */ if(!defined('DEDEINC')) { exit("Request Error!"); } // ... 后面是正常的生成验证码的代码 ... - 如果发现任何可疑的、不属于 DedeCMS 官方代码的内容,请立即删除,并用官方源文件覆盖。
- 用文本编辑器(如 Notepad++, VS Code)打开
浏览器缓存或 Cookie 问题
浏览器缓存了旧的、有问题的页面或 Cookie,也可能导致验证码加载不出来。
如何排查和解决:
- 清除浏览器缓存和 Cookie:
- 按
Ctrl + F5或Ctrl + Shift + R强制刷新页面。 - 如果不行,请尝试浏览器的“无痕/隐私模式”打开页面。
- 或者直接清除浏览器的缓存和 Cookie。
- 按
服务器安全软件拦截
部分服务器(如阿里云、腾讯云)会安装安全狗等软件,或者 php.ini 中开启了 open_basedir 限制,可能会阻止 seccode.php 访问某些系统函数或目录,从而导致生成图片失败。
如何排查和解决:
-
检查
open_basedir:- 打开
php.ini文件,找到open_basedir这一行。 - 确保它的值包含了你的网站根目录。
open_basedir = /var/www/your_domain/:/tmp/ - 如果没有这个配置项,或者配置不正确,可能会导致 GD 库无法创建临时文件,可以尝试注释掉这行(在行首加 )或修改后重启 PHP 服务。
- 打开
-
检查安全软件:
- 登录你的服务器控制面板(如宝塔面板、cPanel),查看安全软件的日志,看是否有拦截
seccode.php的记录。 - 如果有,将其加入白名单。
- 登录你的服务器控制面板(如宝塔面板、cPanel),查看安全软件的日志,看是否有拦截
PHP 版本不兼容
你使用的 DedeCMS 版本可能与你当前的 PHP 版本不兼容,一些非常老的 DedeCMS 版本可能不完全支持 PHP 7.x 或更高版本。
如何排查和解决:
- 检查版本兼容性:
- 确认你安装的 DedeCMS 版本和当前服务器的 PHP 版本是否兼容,DedeCMS 5.7 系列对 PHP 7.0-7.4 支持较好,但对 PHP 8.x 可能需要一些修改。
- 如果不兼容,考虑将 PHP 版本回退到兼容的版本,或者升级到支持新版 PHP 的 DedeCMS 版本。
总结与排查步骤
当你遇到这个问题时,请按照以下顺序进行排查,这能帮你最高效地定位问题:
- 第一步:强制刷新页面和清除浏览器缓存。 (排除浏览器问题)
- 第二步:检查
phpinfo(),确认 GD 库是否开启。 (最核心的原因) - 第三步:检查
/include/vdimgck.php文件是否存在且内容正常。 (排除文件问题) - 第四步:设置
data目录权限为 755。 (解决写入权限问题) - 第五步:检查
php.ini中的open_basedir和服务器安全软件。 (解决环境限制问题) - 第六步:考虑 PHP 版本与 DedeCMS 的兼容性。 (最后的可能性)
按照这个流程走一遍,90% 以上的“DedeCMS 安全确认码不显示”问题都能得到解决,如果所有方法都试过了还是不行,请检查你的服务器错误日志(error_log),里面可能会有更具体的错误信息。
