资讯专栏INFORMATION COLUMN

ThinkPHP验证码不显示的解决方案

Meils / 1504人阅读

摘要:今天遇到一个很奇怪的,就是我写了一个程序本地运行正常,但是发布到甲方的服务器上出现无法显示验证码的。适用于验证码图片在新窗口打开的时候显示了报错信息以及一堆乱码的情况下,如果有报错信息,请根据报错信息进行检查验证码所调用的字体是否缺失。

今天遇到一个很奇怪的BUG,就是我写了一个PHP程序本地运行正常,但是发布到甲方的服务器上出现无法显示验证码的BUG。

具体表现就是chorme浏览器上显示一个裂了的图片小图标,右键点击该图片在新窗口打开,仍然是一个裂了的小图片,并非报错信息(开启xdebug扩展和php报错的情况下),如果是这样那么就说明验证码URL路由和业务逻辑代码没问题,是生成验证码的环节出问题了,我的Debug思路是这样的:

1.检查GD库是否安装正确,Linux推荐使用yum或者apt或者pecl等方式安装,Windows推荐使用phpStudy这个集成环境,他集成好了常用扩展,只需鼠标右键开启即可。(适用于验证码图片在新窗口打开的时候显示了报错信息以及一堆乱码的情况下,如果有报错信息,请根据报错信息进行debug)

2.检查验证码所调用的字体是否缺失。有部分验证码组件调用的字体在目标计算机上并未安装,这个需要分析验证码模块的源码观察。我用的是ThinkPHP官方的think-captcha,在vendortopthinkthink-captchasrc可以找到他的源码,在vendortopthinkthink-captchaassets这里可以看到这款验证码插件是自带了字体的,所以ThinkPHP的验证码基本上可以不用考虑字体问题,如果是别的验证码插件,那么还是要检查一下这个地方的。

3.把有bug的验证码图片下载下来,以及本地测试正常的验证码图片下载下来,使用记事本查看并且对比。

上图是本地环境的验证码图片的记事本,我们使用更专业的16进制编辑器来分析一下文件差别。

如图所示,我们发现bad这个坏文件除了前面多了EF BB BF等数字以外,其他内容一模一样,说明是PHP在渲染图片的时候多渲染了这些文字,至于原因我猜测可能是服务器上没有专业的代码编辑器,因此运维人员使用普通的Windows记事本修改了php代码导致多了这个BOM头部。

如果是第三种原因,解决方法有两个,一个是在验证码的imagepng输出图片代码调用之前用ob_clean清除php的输出缓冲区。还有就是使用一些工具批量对代码的bom进行去除。

我这里使用的是ob_clean,在think-captcha的主文件Captcha.php的第203行之前加上ob_clean(),这样一劳永逸。如果对性能和稳定性有严苛要求,建议还是用工具批量去除bom比较保险。同时也建议大家随时在服务器上装一个editplus等专业的代码编辑器。不要用Windows的记事本修改代码。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28769.html

相关文章

  • thinkphp 验证码不显示,加载不了解决方法。

    摘要:在用处理用户登录功能时,碰上了验证码加载不出来的问题。清空擦掉输出缓冲区的验证码输出较为简单,只要调用封装好的类就行啦。类可以支持验证码的生成和验证功能 在用 thinkPHP3.2.3 处理用户登录功能时,碰上了验证码加载不出来的问题。 一脸懵逼地调试输出一下缓冲区的内容: var_dump(ob_get_clean()); // 得到当前缓冲区的内容并删除当前输出缓 返回如下图...

    bladefury 评论0 收藏0
  • PHP_ThinkPHP

    摘要:相关信息,面向过程,面向对象,轻量级。轻量级功能实用,面向过程和面向对象混合开发。找到文件为文件名为验证码类没有在自动加载类中载入,需要手动载入。底层的和会影响原始的框架中的引入,可以使用框架中提供的引入。 不使用框架的问题 在实际工作中,如果不使用框架会遇到的问题。 程序项目生命时间非常短(维护性,生命力弱) 分共协作开发项目,彼此代码风格不一致。 开发程序,喜欢挖坑。 开发者离职...

    wind3110991 评论0 收藏0
  • 基于ThinkPHP5拿来即用高性能后台管理系统

    摘要:数据库文件已经上传,安装配置就可以使用简称即基于的后台管理系统官方文档地址在线体验地址账户密码线上仓库在线地址源代码下载克隆直接下载本地部署运行环境要求建议配置虚拟域名若不清楚,请自行解决之,方便接下来开展你的开发工作。 喜欢就Star,不只是Fork; 想要分享的动机才是驱动力,而技术仅仅是一种方法。 数据库文件已经上传,安装配置就可以使用 showImg(https://seg...

    894974231 评论0 收藏0
  • 基于ThinkPHP5拿来即用高性能后台管理系统

    摘要:数据库文件已经上传,安装配置就可以使用简称即基于的后台管理系统官方文档地址在线体验地址账户密码线上仓库在线地址源代码下载克隆直接下载本地部署运行环境要求建议配置虚拟域名若不清楚,请自行解决之,方便接下来开展你的开发工作。 喜欢就Star,不只是Fork; 想要分享的动机才是驱动力,而技术仅仅是一种方法。 数据库文件已经上传,安装配置就可以使用 showImg(https://seg...

    SHERlocked93 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<