编程技术下面由
thinkphp框架教程栏目给大家介绍ThinkPHP验证码不显示的解决方案,希望对需要的朋友有所帮助!

搞定ThinkPHP验证码不显示的问题_编程技术_亿码酷站插图

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

企业微信截图_15992686518073.png

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

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

企业微信截图_15992686624716.png

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

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

企业微信截图_15992686694958.png

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

企业微信截图_15992686763453.png

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

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

企业微信截图_15992686821830.png

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

搞定ThinkPHP验证码不显示的问题
—–文章转载自PHP中文网如有侵权请联系admin#tyuanma.cn删除

​教你导入golang.org的包

下载声明:
  • 本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压;
  • 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。
  • 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版!
  • 版权声明:
  • 下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。
  • 免责声明:
  • 您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!