ThinkPhp中使用Verify类生产验证码不显示的原因

更新时间:2015-08-26 点击量:1329

ThinkPhp中使用Verify类生产验证码不显示的原因

网站是用thinkphp3.2.3开发的,在部署的时候发现验证码不好使了,显示不了。


可以看到只显示裂开的图标

生成的验证码不显示


右键->在新标签页中打开图片

右键,在新窗口中打开


查看源代码,可以看到输出的内容是png的内容,说明有输出

查看源代码,可以看到输出的内容是png的内容


按键F12,在Network 栏中可以看到输出 (Response Header下,content-Length为2458)

response header Content-Length 长度不为0,说明有输出


在生成验证码的代码前加上语句exit;

在生成代码前加入 exit;

完整代码如下

 function verify(){
       $config = array("expire"=>2400, 'length' => 6,"useCurve"=>false,
            "codeSet"=>"123456789");
       exit;
       $verify = new Verify($config);
       $verify->entry();
    }

在调试中,可以看到content-length为3,说明在生成验证码之前有输出,影响了验证码的输出。

可以看到content-length为三


在exit前,加上ob_end_clean();

在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;

可以看见content-length为0


去除代码exit;

去除exit语句

现在可以正常显示了。

正常显示


总结

thinkphp中使用Verify类生产验证码不显示的原因:

  1. php未开启GB库;
  2. 访问路径不正确;
  3. 编码不为UTF-8;
  4. 生成验证码前已经有输出。

前三种原因按照原义处理即可。
第四点,处理方法:

  1. 常见的原因是开启了调试模式,关闭调试模式即可define('app_DEbug',false);;

  2. 或者在输出图片之前添加ob_end_clean();ob_clean();语句;

ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭。
ob_clean 清空(擦掉)输出缓冲区

支付宝扫码打赏 微信打赏

如果文章对您有帮助,就打赏一个吧

在线客服

客户服务

热线电话:

13128985956 服务时间:

周一到周六:9:00-18:00

在线QQ客服

在线微信客服

关于我们 常见问题

支付方式 加盟合作

提交需求
优惠红包 购物车0 反馈留言 返回顶部