fiberphp-ext / captcha
🔢 FiberPHP 验证码组件 —— 图形验证码与滑块验证码,支持防重放、自定义样式,集成 Session。
dev-master
2026-08-23 06:58 UTC
Requires
- php: >=8.3
- ext-gd: *
- fiberphp/framework: dev-master
Requires (Dev)
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2026-08-23 06:58:14 UTC
README
图形验证码与滑块验证码,支持防重放、自定义样式。
目录结构
src/
├── Captcha.php # 统一入口
├── Install.php # 安装器(发布配置)
├── helpers.php # 助手函数 captcha()
├── Contract/
│ └── DriverInterface.php # 驱动契约
└── Driver/
├── ImageDriver.php # 图形验证码(GD 绘制)
└── SliderDriver.php # 滑块验证码
config/
└── captcha.php # 配置文件
tests/
├── CaptchaTest.php # 8 个测试用例
└── bootstrap.php
安装
composer require fiberphp-ext/captcha
配置
config/captcha.php:
return [
'default' => 'image',
'drivers' => [
'image' => [
'driver' => 'image',
'width' => 120,
'height' => 40,
'length' => 4,
'font' => 5,
'noise' => 30,
'curve' => true,
'expire' => 300,
],
'slider' => [
'driver' => 'slider',
'width' => 300,
'height' => 150,
'slider_width' => 50,
'tolerance' => 5,
'expire' => 300,
],
],
];
快速开始
图形验证码
// 生成(返回 key + base64 图片)
$captcha = captcha()->image();
// {"key":"captcha_abc123","image":"data:image/png;base64,..."}
// 前端展示
<img src="<?= $captcha['image'] ?>" alt="验证码">
// 验证(大小写不敏感,验证后自动销毁)
if (captcha()->verify($captcha['key'], $userInput)) {
// 验证通过
}
滑块验证码
// 生成(返回背景图 + 滑块图)
$captcha = captcha()->slider();
// {"key":"slider_xyz789","bg":"data:...","slider":"data:..."}
// 前端拖动后验证
if (captcha()->verify($captcha['key'], $dragX)) {
// 验证通过(容差范围内)
}
助手函数
captcha()->image();
captcha()->slider();
captcha()->verify($key, $input);
API
Captcha
| 方法 | 说明 |
|---|---|
image() | 生成图形验证码,返回 ['key', 'image'] |
slider() | 生成滑块验证码,返回 ['key', 'bg', 'slider'] |
verify($key, $input) | 验证输入,验证后销毁 |
ImageDriver
- 随机 4 位字母数字
- GD 绘制 + 噪点干扰 + 曲线干扰
- 防时序攻击(
hash_equals) - 一次性验证(验证后销毁)
SliderDriver
- GD 生成渐变背景 + 滑块拼图
- 容差验证(默认 ±5px)
- 一次性验证
测试
composer install
./vendor/bin/phpunit
License
MIT