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

  • 阅读量:2377  发布时间:   

  • 标签:
  • thinkphp
  • GB库
  • php

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()<img alt="在exit前,加上ob_end_clean()" src="https://s.yunzhuji.shop/uploads/image/150820/ex8mdg35p0.png_.jpg?media_id=196" title=" " width="600"  >

 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 清空(擦掉)输出缓冲区

猜你喜欢

微信QQ空间QQ好友新浪微博联系客服