Blame view

app/Classes/Capcha.php 2.51 KB
ac8b91cfd   Андрей Ларионов   Обновление системы.
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);
      }
  }