正常排查思路:
第一 查看服务器GD库是否开启;就是PHP对应的gd扩展库没开或者没有安装 ,修改 php.ini中的extension=php_gd2.dll里面的这个前面分号没去掉。修改后重启对应WEB服务。
第二 查看生成的验证码路径是否正确;
第三 是否在服务器上直接用文本编辑配置文件等文件,导致编码不一致;
第四 在生成验证码之前有输出。
在生成验证码之前用var_dump( ob_get_contents())查看是否有输出。
若有输出的话,解决办法:
在扩展文件Image.class.php中找到buildImageVerify()方法,在生成验证码Image::output($im, $type)之前加清除有输出内容的代码ob_end_clean();
在调用的地方通用加入该清除代码<?php import('ORG.Util.Image');ob_end_clean();Image::buildImageVerify();?>
或者
在验证码控制器,用ob_clean();清空缓存就OK。如下图修改:
特殊情况:thinkphp5.0在服务器iis环境下调用验证码不显示,在本地apache环境调式正常解决办法
使用代码编辑器打开文件 endor/topthink/think-captcha/CaptchaController.php,添加代码:ob_clean(); 如下:
public function verifty() { $config = [ // 验证码字体大小 'fontSize' => 30, // 验证码位数 'length' => 4, // 关闭验证码杂点 'useNoise' => true, ]; ob_clean();//加上这句话就可以显示了 $captcha = new Captcha($config); return $captcha->entry(); }
原文:https://blog.csdn.net/u014617119/article/details/78838419