php 有很多优秀的扩展包可以帮我们缩短开发时间,避免重复造轮子.验证码扩展包 Gregwar/Captcha 就是其中的一个.
1. 利用 composer 安装
composer require gregwar/captcha
2. 使用示例
2.1. 获取生成的验证码中的内容,并将验证码图片保存到本地
# 测试路由
Route::get('test', function () {
$builder = new \Gregwar\Captcha\CaptchaBuilder();
$captcha = $builder->build();
$captcha_content = $captcha->getPhrase();
\Illuminate\Support\Facades\Cache::put('test_captcha',$captcha_content,2);
$captcha->save('out.jpg');
});
代码分析
- 实例化一个 CaptchaBuilder 对象,调用 build() 方法生成图片验证码.
- build() 方法中可以传入要生成图片的宽,高,字体等参数.
- getPhrase() 方法获取图片验证码的内容
- save() 方法将图片验证码保存到本地
这就是我们生成的图片验证码文件和存到缓存中的验证码内容,用来与表单提交的验证码内容进行比对.
2.1 将生成的验证码图片转成 base64 格式
# 测试路由
Route::get('test', function () {
$builder = new \Gregwar\Captcha\CaptchaBuilder();
$captcha = $builder->build();
$captcha_content = $captcha->getPhrase();
\Illuminate\Support\Facades\Cache::put('test_captcha',$captcha_content,2);
$captcha_base64_content = $captcha->inline();
info($captcha_base64_content);
});
代码分析
- inline() 方法可以将验证码图片转成 base64 格式.
- info() 方法是 Laravel 的辅助函数,将信息写入日志文件「我用的是 Laravel 框架」
将日志中的 base64 内容黏贴到浏览器访问
2.3 自定义验证码的长度
# 测试路由
Route::get('test', function () {
$phraseBuilder = new PhraseBuilder(7);
$builder = new \Gregwar\Captcha\CaptchaBuilder(null,$phraseBuilder);
$captcha = $builder->build();
$captcha_content = $captcha->getPhrase();
\Illuminate\Support\Facades\Cache::put('test_captcha',$captcha_content,2);
// $captcha_base64_content = $captcha->inline();
// info($captcha_base64_content);
});
2.4 自定义验证码的内容范围
有时我们需要自定义验证码的的内容范围,比如只能是 1-5a-f 的 4 个数字.
# 测试路由
Route::get('test', function () {
$phraseBuilder = new PhraseBuilder(4,'12345abcdef');
$builder = new \Gregwar\Captcha\CaptchaBuilder(null,$phraseBuilder);
$captcha = $builder->build();
$captcha_content = $captcha->getPhrase();
\Illuminate\Support\Facades\Cache::put('test_captcha',$captcha_content,2);
// $captcha_base64_content = $captcha->inline();
// info($captcha_base64_content);
});
更多用法参看文档 https://github.com/Gregwar/Captcha