ThinkPHP 验证码因存在错误而无法显示解决

  • 发表于
  • PHP

错误提示

图像“http://site/index.php?act=seccode&op=funcode&nchash=101d10a9”因存在错误而无法显示。

解决方法

在调用验证码之前加上 ob_clean();

生成验证码函数

public function verify(){
$verify = new \Think\Verify();
$verify->entry();
}

修改如下

public function verify(){

ob_clean();

$verify = new \Think\Verify();
$verify->entry();
}

问题解决!

分析

  1. ob_clean这个函数的作用:
    用来丢弃输出缓冲区中的内容,如果你的网站有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区
  2. 在出现问题的页面查看源代码,发现在页面尾部出现了一堆其他代码(原因不明)

对于thinkphp验证码无法显示要注意的问题

  1. 是否已成功安装了GB
  2. 验证码类放置的位置,以及加载的路径是否正确
    import("@.ORG.Util.Image");--
    放在项目包里加载方式
    import('ORG.Util.Image');--
    放在核心扩展包的加载方式
  3. 检查一下是否少了String类,如果不少,和Image是否在同一个目录下。
  4. 检查一下页面编码是不是UTF8 ,不是的话转换
  5. 如果是缓存造成的,清除一下BOM,方法是找到一个清除BOM的类,到thinkphp官方论坛里找。   
  6. 不同版本的核心包验证码类有些是有出入的,试着打开Image.class.php中的output函数中的ob_clean();注释掉或者加上,调试一下

参考

http://www.phptalker.com/thread-471-1-1.html