ThinkPHP验证码不显示的解决方法-创新互联

这篇文章给大家分享的是有关ThinkPHP验证码不显示的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

创新互联公司专注于乌拉特中企业网站建设,响应式网站设计,成都商城网站开发。乌拉特中网站建设公司,为乌拉特中等地区提供建站服务。全流程按需策划,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

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

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

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

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

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

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

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

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

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

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

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

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

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

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

感谢各位的阅读!关于“ThinkPHP验证码不显示的解决方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


分享名称:ThinkPHP验证码不显示的解决方法-创新互联
网页链接:http://hbruida.cn/article/dhidpj.html