在Dedecms 5.6/5.7系统中,转移data目录后网站验证码不显示的问题较为常见,以下是一些可能的解决方法:
1. GD库问题
验证码需要GD库支持,请检查你的环境是否已开启GD库。
2. 字体文件路径问题
打开 Include/vdimgck.php 文件,找到如下代码:
for($i=0;$i<$rndcodelen;$i++) { $bc = mt_rand(0, 1); $rndstring[$i] = strtoupper($rndstring[$i]); $c_fontColor = $fontColor[mt_rand(0,4)]; $y_pos = $i==0 ? 4 : $i*($font_size+2); $c = mt_rand(0, 15); @imagettftext($im, $font_size, $c, $y_pos, 19, $c_fontColor, $font_file, $rndstring[$i]); $lastc = $rndstring[$i]; }
具体原因可能是字体文件路径不对,解决方法:
1、确认 include/data/fonts/ 里面存在字体文件,默认为 ggbi.ttf。
2、在 for($i=0;$i<$rndcodelen;$i++) 上一行加上如下代码:
$font_file= str_replace("\","/",$font_file);
即将字体文件路径中的反斜杠替换成斜杠,因为反斜杠有转译字符的功能,导致 Imagettftext() 函数总是返回错误。
3. data路径调整
如果将 data 目录转移到了其他位置,需要调整相关路径,打开 include 下的 vdimgck.php,找到如下代码:
require_once (dirname(__FILE__).'/../data/safe/inc_safe_config.php'); require_once (dirname(__FILE__).'/../data/config.cache.inc.php'); $config = array( 'font_size' => 14, 'img_height' => $safe_wheight, 'word_type' => (int)$safe_codetype, // 1:数字 2:英文 3:单词 'img_width' => $safe_wwidth, 'use_boder' => TRUE, 'font_file' => dirname(__FILE__).'/data/fonts/ggbi.ttf', 'wordlist_file' => dirname(__FILE__).'/data/words/words.txt', 'filter_type' => 5); $sessSavePath = dirname(__FILE__)."/../data/sessions/";
将上述代码中的data
路径做相应的调整,如果将 data 移到网站根目录的上一级目录(服务器网站库目录),则需要在路径中加一个/..
,改后如下:
require_once (dirname(__FILE__).'/../../data/safe/inc_safe_config.php'); require_once (dirname(__FILE__).'/../../data/config.cache.inc.php'); $config = array( 'font_size' => 14, 'img_height' => $safe_wheight, 'word_type' => (int)$safe_codetype, // 1:数字 2:英文 3:单词 'img_width' => $safe_wwidth, 'use_boder' => TRUE, 'font_file' => dirname(__FILE__).'/data/fonts/ggbi.ttf', 'wordlist_file' => dirname(__FILE__).'/data/words/words.txt', 'filter_type' => 5); $sessSavePath = dirname(__FILE__)."/../../data/sessions/";
这样就可以解决由于路径问题导致的验证码不显示。
4. 配置文件修改
DedeV5.6新版统一将验证码的有效设置在【系统】→【验证码安全设置】里,可以设置哪些地方启用验证码,哪些地方不启用,还可以设置验证码类型,比如数字、英文与单词,修改后的保存实际上是修改了 datasafeinc_safe_config.php 这个文件,这是个配置文件。
$safe_gdopen = '1,2,3,5,6,7'; // 系统哪些地方开启验证码
如果不需要验证码,可以将其中的6
删除即可。
5. 通用解决方案
如果没有验证码无法进入后台,可以通过修改 PHP 文件源代码来取消后台验证码功能,方法如下:
打开 dede/login.php,找到如下代码:
if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){ ResetVdValue(); ShowMsg('验证码不正确!','login.php',0,1000); exit; }
将第一行替换为:
if(false){
这样即可取消验证码功能。
FAQs
1、Q: 如果验证码只显示背景而不显示字母怎么办?
A: 这是由于字体文件路径不对导致的,确认 include/data/fonts/ 里面存在字体文件,默认为 ggbi.ttf,在验证码生成文件 Include/vdimgck.php 中找到如下代码:
for($i=0;$i<$rndcodelen;$i++) { $bc = mt_rand(0, 1); $rndstring[$i] = strtoupper($rndstring[$i]); $c_fontColor = $fontColor[mt_rand(0,4)]; $y_pos = $i==0 ? 4 : $i*($font_size+2); $c = mt_rand(0, 15); @imagettftext($im, $font_size, $c, $y_pos, 19, $c_fontColor, $font_file, $rndstring[$i]); $lastc = $rndstring[$i]; }
在 for($i=0;$i<$rndcodelen;$i++) 上一行加上如下代码:
$font_file= str_replace("\","/",$font_file);
即将字体文件路径中的反斜杠替换成斜杠,因为反斜杠有转译字符的功能,导致 Imagettftext() 函数总是返回错误。
2、Q: 如果将 data 目录转移到了其他位置,如何调整相关路径?
A: 打开 include 下的 vdimgck.php,找到如下代码:
require_once (dirname(__FILE__).'/../data/safe/inc_safe_config.php'); require_once (dirname(__FILE__).'/../data/config.cache.inc.php'); $config = array( 'font_size' => 14, 'img_height' => $safe_wheight, 'word_type' => (int)$safe_codetype, // 1:数字 2:英文 3:单词 'img_width' => $safe_wwidth, 'use_boder' => TRUE, 'font_file' => dirname(__FILE__).'/data/fonts/ggbi.ttf', 'wordlist_file' => dirname(__FILE__).'/data/words/words.txt', 'filter_type' => 5); $sessSavePath = dirname(__FILE__)."/../data/sessions/";
将上述代码中的 data 路径做相应的调整,如果将 data 移到网站根目录的上一级目录(服务器网站库目录),则需要在路径中加一个 /..,改后如下:
require_once (dirname(__FILE__).'/../../data/safe/inc_safe_config.php'); require_once (dirname(__FILE__).'/../../data/config.cache.inc.php'); $config = array( 'font_size' => 14, 'img_height' => $safe_wheight, 'word_type' => (int)$safe_codetype, // 1:数字 2:英文 3:单词 'img_width' => $safe_wwidth, 'use_boder' => TRUE, 'font_file' => dirname(__FILE__).'/data/fonts/ggbi.ttf', 'wordlist_file' => dirname(__FILE__).'/data/words/words.txt', 'filter_type' => 5); $sessSavePath = dirname(__FILE__)."/../../data/sessions/";
这样就可以解决由于路径问题导致的验证码不显示。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1224077.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复