<FORM method="post" class="form" action="{:url('check')}">
输入验证码:<INPUT type="text" class="text" name="code"><br/>
<div>{:captcha_img()}</div>
<INPUT type="submit" class="btn" value=" 提交 ">
</FORM>
网上对ThinkPHP5.*版本验证码不显示的原因总结有以下几条:
1.未安装验证码类库
解决办法:DOS切换到项目根目录,执行Composer安装类库。
composer require topthink/think-captcha=1.*
我的ThinkPHP5.*是完整版的,因此默认包含了验证码类库,排除问题1。
2.未开启GD库
解决办法:开启GD库。
经过检查,本地环境已开启GD库,排除问题2。
3.文件UTF-8 BOM头问题
解决办法:在验证码控制器中添加代码:
ob_clean();
文件位置:/vendor/topthink/think-captcha/src/CaptchaController.php
经过检查,我的文件格式为UTF-8无BOM头格式,因此排除问题3。
4.伪静态原因,右键复制验证码网址,在浏览器中打开发现是404。
这个问题是因为我们没有配置路由去隐藏 index.php,而ThinkPHP5.*的验证码默认生成的URL是不带index.php的,这就导致验证码url404从而无法显示。
解决办法:按照官方手册的教程隐藏入口文件,在入口文件的同级目录下新建.htaccess文件,输入如下代码后保存。
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
然后刷新下页面,发现验证码已经正常显示了,问题解决。