Capcha.php
2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
namespace App\Classes;
class Capcha
{
public $USE_SESSION;
public $chars;
public $length;
function __construct() {
$this->USE_SESSION = true;
// 1. Генерируем код капчи
// 1.1. Устанавливаем символы, из которых будет составляться код капчи
$this->chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz';
// 1.2. Количество символов в капче
$this->length = 6;
}
public function Release() {
// 1.3. Генерируем код
$code = substr(str_shuffle($this->chars), 0, $this->length);
if ($this->USE_SESSION) {
// 2a. Используем сессию
session_start();
$_SESSION['captcha'] = crypt($code, '$1$itchief$7');
session_write_close();
} else {
// 2a. Используем куки (время действия 600 секунд)
$value = crypt($code, '$1$itchief$7');
$expires = time() + 600;
setcookie('captcha', $value, $expires, '/', 'test.ru', false, true);
}
// 3. Генерируем изображение
// 3.1. Создаем новое изображение из файла
$image = imagecreatefrompng(__DIR__ . '/files/bg.png');
// 3.2 Устанавливаем размер шрифта в пунктах
$size = 36;
// 3.3. Создаём цвет, который будет использоваться в изображении
$color = imagecolorallocate($image, 66, 182, 66);
// 3.4. Устанавливаем путь к шрифту
$font = __DIR__ . '/files//oswald.ttf';
// 3.5 Задаём угол в градусах
$angle = rand(-10, 10);
// 3.6. Устанавливаем координаты точки для первого символа текста
$x = 56;
$y = 64;
// 3.7. Наносим текст на изображение
imagefttext($image, $size, $angle, $x, $y, $color, $font, $code);
// 3.8 Устанавливаем заголовки
header('Cache-Control: no-store, must-revalidate');
header('Expires: 0');
header('Content-Type: image/png');
// 3.9. Выводим изображение
imagepng($image);
// 3.10. Удаляем изображение
imagedestroy($image);
}
}