Предлагаю свое решение по замене стандартной каптчи
1. В коне сайта в папке captcha удаляем все файлы, которые там есть
2. Создаем в папке captcha папку fonts, в нее помещаем шрифты, которые будут использованы при генерации Вашей каптчи.
Шрифты обязательно должны быть с TrueType с раширением .ttf
Шрифтов может быть несколько (сколько угодно) и буквы для каптчи будут браться рандомно (случайно) из каждого шрфта
В общем поиграетесь - поймете - тут все просто.
3. В папку captcha кладем (создаем) файл .htaccess следующего содержания:
Код: Выделить всё
Order Deny,Allow
Deny from all
<Files image.php>
Order Allow,Deny
Allow from all
</Files>
4. В папку captcha кладем (создаем) файл image.php следующего содержания:
Код: Выделить всё
<?php
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
session_name(md5($_SERVER['HTTP_USER_AGENT']));
}
session_start();
$width = 130; //Ширина изображения
$height = 60; //Высота изображения
$font_size = 16; //Размер шрифта
$let_amount = 4; //Количество символов, которые нужно набрать
$fon_let_amount = 200; //Количество символов, которые находятся на фоне
$path_fonts = 'fonts/'; //Путь к шрифтам
$letters = array('a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','2','3','4','5','6','7','9'); //Символы, используемые в каптче
$colors = array('10','30','50','70','90','110','130','150','170','190','210'); //Цвета используемые в каптче
$src = imagecreatetruecolor($width,$height);
$fon = imagecolorallocate($src,255,255,255);
imagefill($src,0,0,$fon);
$fonts = array();
$dir=opendir($path_fonts);
while($fontName = readdir($dir))
{
if($fontName != "." && $fontName != "..")
{
$fonts[] = $fontName;
}
}
closedir($dir);
for($i=0;$i<$fon_let_amount;$i++)
{
$color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
$letter = $letters[rand(0,sizeof($letters)-1)];
$size = rand($font_size-2,$font_size+2);
imagettftext($src,$size,rand(0,45),rand($width*0.1,$width-$width*0.1),rand($height*0.2,$height),$color,$font,$letter);
}
for($i=0;$i<$let_amount;$i++)
{
$color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],rand(20,40));
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
$letter = $letters[rand(0,sizeof($letters)-1)];
$size = rand($font_size*2.1-2,$font_size*2.1+2);
$x = ($i+1)*$font_size + rand(4,7);
$y = (($height*2)/3) + rand(0,5);
$cod[] = $letter;
imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
}
$_SESSION["captcha_code"] = implode('',$cod);
header ("Content-type: image/gif");
imagegif($src);
?>
5. В папке design/default/html (или из вашей темы), в файлах .tpl, там где нужно использовать каптчу, к примеру в файле feedback.tpl, ищем следующий код:
Код: Выделить всё
{if $settings->captcha_feedback}
<div class="col-xs-12 col-lg-6 form-inline m-b-1-md_down">
{* Изображение капчи *}
<div class="form-group">
<img class="brad-3" src="captcha/image.php?{math equation='rand(10,10000)'}" alt="captcha" title="captcha"/>
</div>
{* Поле ввода капчи *}
<div class="form-group">
<input class="form-control" type="text" name="captcha_code" value="" data-format="\d\d\d\d\d" data-notice="{$lang->form_enter_captcha}" data-language="{$translate_id['form_enter_captcha']}" placeholder="{$lang->form_enter_captcha}*"/>
</div>
</div>
{/if}
и заменяем его на следующий:
Код: Выделить всё
{if $settings->captcha_feedback}
<div class="col-xs-12 col-lg-6 form-inline m-b-1-md_down">
{* Изображение капчи *}
<div class="form-group">
<img class="brad-3" src="captcha/image.php" alt="captcha" title="captcha"/>
</div>
{* Поле ввода капчи *}
<div class="form-group">
<input class="form-control" type="text" name="captcha_code" value="" data-notice="{$lang->form_enter_captcha}" data-language="{$translate_id['form_enter_captcha']}" placeholder="{$lang->form_enter_captcha}*"/>
</div>
</div>
{/if}
Вот, собственно и все
Все настройки каптчи (размер, кол-во символов, цвета и т.д) находятся в файле captcha/image.php
Пользуйтесь на здоровье