Captcha – изменение настроек (2.8)
Материал из Umicms
Изменить настройки основной каптчи нет возможности, т.к. они жестко прописаны в системном файле, но можно подключить свой кастомный файл каптчи, который можно было бы отредактировать без опасения, что изменения затрутся при обновлении системы. В конфигурационном файле config.ini присутствует блок 'anti-spam' с переменной captcha.drawer = "default". Изменим значение переменной на 'mycaptha', т.е. запишем:
captcha.drawer = "mycaptha"
Далее в папке /classes/system/utils/captcha/drawers/ сделаем копию файла default.php и переименуем новый файл в mycaptcha.php. Изменим содержимое файла mycaptcha.php, допустим, изменим названием класса, добавим метод генерации строки для каптчи (getRandomCode), изменим набор и количество символов в переменных $length и $alphas, а также $length в методе render(). В итоге получим следующий рабочий класс:
<?php class mycaptchaCaptchaDrawer extends captchaDrawer { public function getRandomCode() { $length = 4; $code = ''; $alphas = '123456789'; $c = strlen($alphas) - 1; for($i = 0; $i < $length; $i++) { $code .= $alphas{rand(0, $c)}; } return $code; } public function draw($randomCode) { header('Content-type: image/jpeg'); header('Etag: ' . sha1($randomCode)); $this->render($randomCode); exit; } private function render($str) { $length = 5; $charWidth = 15; $imagewidth = $imagelength = $length * $charWidth + 16; $imageheight = 35; $image = imagecreate($imagelength, $imageheight); $bgcolor = imagecolorallocate($image, 255, 255, 255); $stringcolor = imagecolorallocate($image, 0, 0, 0); $linecolor = imagecolorallocate($image, 0, 0, 0); $chars = str_split($str); $sz = sizeof($chars); $left = 20; for($i = 0; $i < $sz; $i++) { $rx = (rand() % 6) - 3; $ry = (rand() % 6) - 3; imagestring($image, 25, ($left + $rx), (8 + $ry), $chars[$i], $stringcolor); $left += $charWidth; } $linecolor = imagecolorallocate($image, 204, 204, 204); $c = 10 + (rand() % 10); for($i = 0; $i < $c; $i++) { $y1 = 0; $y2 = $imageheight; $x1 = rand() % ($imagewidth + $imagewidth * 0.2); $x2 = $x1 - $imageheight; imageline($image, $x1, $y1, $x2, $y2, $linecolor); } imagejpeg($image, '', 65); } }; ?>
При таких настройках каптчи, она будет формироваться только из цифр, длина строки равна четырем символам.
Также в config.ini можно подключить kcaptcha, с более усиленной защитой:
captcha.drawer = "kcaptcha"
необходимой код для работы данной каптчи уже присутствует в системе.
