thinkphp是一款流行的PHP框架,用于开发Web应用程序。在使用thinkphp框架时,很多时候需要用到验证码来增加系统的安全性。而thinkphp默认的验证码样式和图片可能不太适合某些应用场景,需要进行更改。本文就介绍一下如何更改thinkphp默认的验证码。
一、找到验证码控制器
在thinkphp框架中,验证码是由内置的一个控制器进行生成和输出的。这个控制器的源代码可以在thinkphp框架的库文件目录中找到,一般路径是:thinkphp/library/think/captcha/Controller.php。
二、复制验证码控制器
为了避免因为修改默认验证码控制器而导致系统更新时出错,应该把默认验证码控制器复制到应用目录下的一个新的目录中。
具体步骤如下:
- 创建一个新的目录,例如:\application\extra\captcha
- 复制控制器Controller.php到该目录下。
- 修改Controller.php的namespace,将其修改为:namespace app\extra\captcha;
三、修改验证码控制器
现在我们就可以修改验证码控制器,改变验证码的生成方式和输出方式了。
- 修改输出方式
默认验证码的输出方式是返回一个gif格式的图片,而我们可以修改输出方式来实现其他样式的验证码。例如,可以将验证码输出为SVG格式的图片。
修改验证码输出方法如下:
public function show() { $config = [ 'expire' => 3, //验证码过期时间(s) 'length' => 4, //验证码长度 'imageH' => 60, //验证码高度 'fontSize' => 20, //验证码字体大小(px) 'useCurve' => false, //是否画混淆曲线 'useNoise' => false, //是否添加杂点 'bg' => [255, 255, 255], //背景颜色 ]; $captcha = new Captcha($config); $captcha->codeSet = '0123456789';//只用数字作为验证码 // 输出svg格式的图片 echo $captcha->entry('svg'); }
- 修改验证码生成方式
thinkphp默认的验证码生成方式是随机生成数字和字母,而我们也可以修改生成方式来满足不同的需求。例如,可以生成中文字符的验证码。
修改验证码生成方式如下(以生成中文验证码为例):
public function show() { //引入新字体文件(这里以方正胖头鱼体为例,字体文件需要自己上传) $ttf_file = __DIR__ .'/fzpty.ttf'; $codeSet = '玩家参与游戏,从而培养了自己 的游戏能力'; //验证码文字内容 $config = [ 'expire' => 3, //验证码过期时间(s) 'length' => 4, //验证码长度 'useZh' => true, //使用中文验证码 'fontttf' => $ttf_file, //指定ttf字体文件 'imageH' => 60, //验证码高度 'fontSize' => 20, //验证码字体大小(px) 'useCurve' => false, //是否画混淆曲线 'useNoise' => false, //是否添加杂点 'bg' => [255, 255, 255], //背景颜色 ]; $captcha = new Captcha($config); $captcha->codeSet = $codeSet;//设置验证码文字内容 // 输出svg格式的图片 echo $captcha->entry('svg'); }
四、修改验证码配置文件
thinkphp验证码控制器会读取配置文件中的参数来决定验证码的生成和输出方式。因此,我们也可以修改配置文件来达到更改验证码的目的。
具体步骤如下:
- 复制框架默认验证码配置文件到自己的应用目录
打开thinkphp框架的验证码配置文件config.php,将其复制到应用目录下的config目录下,并重命名为captcha.php。
- 修改验证码配置
在captcha.php中可以修改验证码的相关配置参数。例如,可以修改验证码的长度,过期时间,字体大小等参数:
return [ 'useNoise' => false, // 是否添加杂点 'useCurve' => false, // 是否画混淆曲线 'fontSize' => 25, // 验证码字体大小 'expire' => 1800, // 验证码过期时间(s) 'length' => 4, // 验证码长度 'fontttf' => '', //验证码字体文件路径 'bg' => [255, 255, 255], // 验证码背景颜色,如果设置为数组则表示渐变色 ];
五、总结
通过以上步骤,我们可以对thinkphp默认的验证码进行修改,实现自定义的样式和验证码内容。需要注意的是,在修改验证码控制器和配置文件时,要将复制后的文件放到应用目录下,避免出现版本更新后覆盖掉的情况。