ThinkPhp中使用Verify类生产验证码不显示的原因
更新时间:2015-08-26 点击量:1329

网站是用thinkphp3.2.3开发的,在部署的时候发现验证码不好使了,显示不了。
可以看到只显示裂开的图标
右键->在新标签页中打开图片
查看源代码,可以看到输出的内容是png的内容,说明有输出
按键F12,在Network 栏中可以看到输出 (Response Header下,content-Length为2458)
在生成验证码的代码前加上语句
exit;
完整代码如下
function verify(){ $config = array("expire"=>2400, 'length' => 6,"useCurve"=>false, "codeSet"=>"123456789"); exit; $verify = new Verify($config); $verify->entry(); }
在调试中,可以看到content-length为3,说明在生成验证码之前有输出,影响了验证码的输出。
在exit前,加上
ob_end_clean();
function verify(){
$config = array("expire"=>2400, 'length' => 6,"useCurve"=>false,
"codeSet"=>"123456789");
ob_end_clean();
exit;
$verify = new Verify($config);
$verify->entry();
}
再次查看,可以看到content-length为0;
去除代码
exit;
现在可以正常显示了。
总结
thinkphp中使用Verify类生产验证码不显示的原因:
- php未开启GB库;
- 访问路径不正确;
- 编码不为UTF-8;
- 生成验证码前已经有输出。
前三种原因按照原义处理即可。
第四点,处理方法:
常见的原因是开启了调试模式,关闭调试模式即可
define('app_DEbug',false);
;或者在输出图片之前添加
ob_end_clean();
或ob_clean();
语句;
ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭。
ob_clean 清空(擦掉)输出缓冲区
如果文章对您有帮助,就打赏一个吧