Captcha – изменение настроек (2.8) — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: «Изменить настройки основной каптчи нет возможности, т.к. они жестко прописаны в системном …») |
Mad grant (обсуждение | вклад) |
||
Строка 71: | Строка 71: | ||
</pre> | </pre> | ||
необходимой код для работы данной каптчи уже присутствует в системе. | необходимой код для работы данной каптчи уже присутствует в системе. | ||
+ | [[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]] |
Текущая версия на 12:50, 5 июня 2013
Изменить настройки основной каптчи нет возможности, т.к. они жестко прописаны в системном файле, но можно подключить свой кастомный файл каптчи, который можно было бы отредактировать без опасения, что изменения затрутся при обновлении системы. В конфигурационном файле 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"
необходимой код для работы данной каптчи уже присутствует в системе.