java captcha 404,ThinkPHP5.*版本验证码无法显示(验证码url404)的解决办法

ThinkPHP5.*版本验证码不显示,代码是直接复制的官方手册中的代码:

输入验证码:

{:captcha_img()}

错误截图:

f7e10d3a895fcb10367e22cf99005849.png

网上对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

6fb540f7d81da7598b4540b3923649be.png

经过检查,我的文件格式为UTF-8无BOM头格式,因此排除问题3。

4.伪静态原因,右键复制验证码网址,在浏览器中打开发现是404。

这个问题是因为我们没有配置路由去隐藏 index.php,而ThinkPHP5.*的验证码默认生成的URL是不带index.php的,这就导致验证码url404从而无法显示。

解决办法:按照官方手册的教程隐藏入口文件,在入口文件的同级目录下新建.htaccess文件,输入如下代码后保存。

Options +FollowSymlinks -Multiviews

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

然后刷新下页面,发现验证码已经正常显示了,问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用 PHP 生成验证码图片的示例: ```php <?php session_start(); // 定义验证码图片的宽度和高度 $width = 120; $height = 40; // 创建一个空白的验证码图片 $image = imagecreatetruecolor($width, $height); // 定义验证码图片的背景颜色和文本颜色 $bg_color = imagecolorallocate($image, 255, 255, 255); $text_color = imagecolorallocate($image, 0, 0, 0); // 填充背景颜色 imagefill($image, 0, 0, $bg_color); // 生成随机的验证码文本 $code = ''; $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; for ($i = 0; $i < 4; $i++) { $code .= $chars[mt_rand(0, strlen($chars) - 1)]; } // 将验证码文本存储到 session 中,以便验证用户输入的文本 $_SESSION['captcha'] = $code; // 在验证码图片中绘制文本 imagettftext($image, 20, 0, 10, 30, $text_color, 'arial.ttf', $code); // 将验证码图片输出到浏览器 header('Content-Type: image/png'); imagepng($image); // 释放内存 imagedestroy($image); ?> ``` 在上面的示例中,我们使用 `imagecreatetruecolor()` 函数创建了一个指定宽度和高度的空白图片,使用 `imagecolorallocate()` 函数定义了验证码图片的背景颜色和文本颜色,使用 `imagefill()` 函数填充了背景颜色,使用 `imagettftext()` 函数在验证码图片中绘制了随机的文本,并使用 `imagepng()` 函数将验证码图片输出到浏览器。最后,我们将验证码文本存储到 `$_SESSION` 中,以便后续验证用户输入的文本是否正确。请注意,为了绘制文本,我们需要使用一个 TrueType 字体文件,例如 Arial.ttf。您需要将此文件放置在与 `captcha.php` 相同的目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值