dkh / captcha-generator
使用 libgd 库生成 Captcha 验证码的 PHP 库。
1.1.0
2018-07-11 14:19 UTC
Requires
- php: >=7.2.0
- ext-gd: *
Requires (Dev)
- phpunit/phpunit: 7.*
This package is auto-updated.
Last update: 2024-09-29 05:27:51 UTC
README
描述
使用 libgd 库生成 Captcha 验证码的 PHP 库。
Captcha 示例
仓库
- GitHub: https://github.com/dangkyokhoang/PHP-Captcha-Generator.
- Packagist: https://packagist.org.cn/packages/dkh/captcha-generator.
所需依赖
- GD 图形库 (ext-gd)。
用户指南
安装
您可以通过运行以下命令轻松地将库安装到您的项目中。
composer require dkh/captcha-generator
实现
Captcha 类型
ExpressionCaptcha
表达式 Captcha 需要用户执行基本的算术运算(加法、减法、乘法和除法)来解决。StringCaptcha
字符串 Captcha 只需要用户识别字符串中的字符。
创建 Captcha
要创建 Captcha,请使用 new *Captcha($size?, $level?)
。
// Default size: 3 and default difficulty level: 1 $expression_captcha = new ExpressionCaptcha(); $string_captcha = new StringCaptcha(); // Specific size and difficulty level $size = 10; $level = 2; $another_expression_captcha = new ExpressionCaptcha($size, $level);
获取 Captcha 的已解决值
要获取 Captcha 的已解决值,请调用 $captcha->solve()
或 *Captcha::solveString($string)
。
将已解决值存储在某个地方,例如在会话变量中,以便稍后验证用户的 Captcha 输入。
$_SESSION['captcha'] = $captcha->solve(); // Or in a way that is infrequent, // use static method *Captcha::solveString() $my_expression = '1+6:3-2*4'; $_SESSION['my_captcha'] = ExpressionCaptcha::solveString($my_expression);
验证用户的 Captcha 输入
要验证用户的 Captcha 输入,请将其与之前存储在某个地方的 Captcha 的已解决值进行比较。
$user_captcha_input = $_POST['captcha'] ?? ''; $is_matched = $_SESSION['captcha'] === $user_captcha_input;
显示 Captcha 图片
要将 Captcha 渲染为图片,请调用 $captcha->render($options?)
,Captcha::renderString($string, $options?)
。返回值是以 base64 编码的 PNG 图片数据字符串。
要显示 Captcha 图片,请使用数据 URL data:image/png;base64
,或将渲染的图片保存到某个地方并返回图片的路径。
$base64_image = $captcha->render(); echo sprintf('<img src="data:image/png;base64,%s">', $base64_image); // Or in a way like this: $my_string = 'any will do?'; $image_path = 'captcha.png'; $base64_image_to_be_saved = Captcha::renderString($my_string); file_put_contents( $image_path, base64_decode($base64_image_to_be_saved) ); echo sprintf('<img src="/%s">', $image_path); // Image rendered with some options $another_base64_image = $captcha->render([ 'height' => 50, 'fill' => [0, 0, 0, 30], // The alpha channel is optional 'color' => [255, 255, 255] ]); echo sprintf( '<img src="data:image/png;base64,%s">', $another_base64_image );
库的示例实现
<?php require_once 'vendor/autoload.php'; use Dkh\ExpressionCaptcha; session_start(); // Verify user's captcha input if (isset($_POST['captcha']) && isset($_SESSION['captcha'])) { $is_matched = $_POST['captcha'] === $_SESSION['captcha']; } else { $is_matched = null; } $message = $is_matched !== null ? ($is_matched ? 'Captcha matched' : 'Captcha not matched') : 'Try solving the captcha'; // Create a captcha $captcha = new ExpressionCaptcha(); // Store captcha's solved value $_SESSION['captcha'] = $captcha->solve(); // Render the captcha into image // The return value is a PNG image string encoded with base64 $base64_image = $captcha->render(); echo sprintf( '<!DOCTYPE html>' . '<html>' . '<body>' . '<form method="POST">' . '<img src="data:image/png;base64,%s"><br>' . '<input name="captcha" placeholder="Input captcha">' . '<input type="submit" value="Submit"><br>' . '</form>' . '<div>Message: %s</div>' . '</body>' . '</html>', $base64_image, $message );