下面由thinkphp框架教程栏目给大家介绍ThinkPHP验证码不显示的解决方案,希望对需要的朋友有所帮助!
今天遇到一个很奇怪的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的记事本修改代码。
以上是搞定ThinkPHP验证码不显示的问题的详细内容。更多信息请关注PHP中文网其他相关文章!

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3汉化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版