ThInkPHP验证码不显示,解决方法汇总

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThInkPHP验证码不显示,解决方法汇总相关的知识,希望对你有一定的参考价值。

出现ThInkphp验证码不显示的情况

官方提示如下:
如果无法显示验证码,请检查:
① PHP是否已经安装GD库支持;
② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出);(打开验证码文件为乱码,也有可能是BOM编码,可查看下方2寻找解决方法)
③ Image类库是否正确导入;
④ 如果是中文验证码检查是否有拷贝字体文件到类库所在目录;

⑤URL_MODEL模式,有些服务器不支持REWRITE 。

 

 

针对上面的情况,一一检查

1.可以用phpinfo 查看GD库是否开启,phpinfo打印出来的页面能搜到如下信息,说明安装了GD库

技术分享

 

2.复制下面代码,保存为php格式,上传到服务器并运行,再刷新验证码。ps:下面代码作用是把所有文件进行无BOM格式编码

ps:把源代码压缩打包上传到服务器,再用服务器解压的情况,容易出现这种情况。ps:有些服务器打开文件之后,会以BOM格式保存文件。

 

<?php  
if (isset($_GET[‘dir‘])){ //设置文件目录  
$basedir=$_GET[‘dir‘];  
}else{  
$basedir = ‘.‘;  
}  
$auto = 1;  
checkdir($basedir);  
function checkdir($basedir){  
if ($dh = opendir($basedir)) {  
  while (($file = readdir($dh)) !== false) {  
   if ($file != ‘.‘ && $file != ‘..‘){  
    if (!is_dir($basedir."/".$file)) {  
     echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";  
    }else{  
     $dirname = $basedir."/".$file;  
     checkdir($dirname);  
    }  
   }  
  }  
closedir($dh);  
}  
}  
function checkBOM ($filename) {  
global $auto;  
$contents = file_get_contents($filename);  
$charset[1] = substr($contents, 0, 1);  
$charset[2] = substr($contents, 1, 1);  
$charset[3] = substr($contents, 2, 1);  
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {  
  if ($auto == 1) {  
   $rest = substr($contents, 3);  
   rewrite ($filename, $rest);  
   return ("<font color=red>BOM found, automatically removed.</font>");  
  } else {  
   return ("<font color=red>BOM found.</font>");  
  }  
}  
else return ("BOM Not Found.");  
}  
function rewrite ($filename, $data) {  
$filenum = fopen($filename, "w");  
flock($filenum, LOCK_EX);  
fwrite($filenum, $data);  
fclose($filenum);  
}  
?>

 






以上是关于ThInkPHP验证码不显示,解决方法汇总的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp生成的验证码不显示问题解决

阿里云 windows 2008 使用Thinkphp5 captcha验证码不显示问题

Thinkphp6中间件引起验证码不显示?

关于LNMP服务器 Thinkphp5验证码不显示问题

thinkphp验证码不显示

精华PHP网站验证码不显示的终结解决方案