# Адаптеры CAPTCHA

Следующие адаптеры поставляются с Zend Framework по умолчанию.

## Zend_Captcha_Word

`Zend_Captcha_Word` -- абстрактный адаптер, реализующий функционал, используемый большинством других адаптеров. Данный адаптер предоставляет мутаторы для задания длины слова, сессии, времени жизни токена, объекта пространства имён сессии, в котором будет храниться токен и класс сессии, если вы не используете `Zend_Session_Namespace`. `Zend_Captcha_Word` реализует логику проверки.

По умолчанию, длина слова -- 8 символов, таймаут сессии -- 5 минут и для хранения данных CAPTCHA используется `Zend_Session_Namespace` (используется пространство имён "`Zend_Form_Captcha_<captcha ID>`").

В дополнении к методам, требуемым интерфейсом `Zend_Captcha_Adapter`, `Zend_Captcha_Word` реализует следующие методы:

- `setWordLen($length)` и `getWordLen()` задаёт и получает длину генерируемого "слова" в символах.

- `setTimeout($ttl)` и `getTimeout()` задаёт и получает время жизни сессионного токена в секундах.

- `setUseNumbers($numbers)` и `getUseNumbers()` указывают, будут ли использоваться цифры при генерации "слова".

- `setSessionClass($class)` и `getSessionClass()` задаёт и получает класс, реализующий функциональность `Zend_Session_Namespace` для хранения сессионного токена и "слова" между клиентскими запросами.

- `getId()` возвращает текущий идентификационный токен.

- `getWord()` возвращает сгенерированное ранее слово. Если слово ещё не было сгенерировано, оно будет автоматически сгенерировано.

- `setSession(Zend_Session_Namespace $session)` задаёт объект сессии для хранения токена и слова между клиентскими запросами. `getSession()` возвращает текущий объект сессии.

Все словесные CAPTCHA могут принимать массив параметров в конструкторе. Параметры можно передать через метод `setOptions()`. Вы так же можете передать объект `Zend_Config` методу `setConfig()`. По умолчанию используются параметры wordLen, timeout и sessionClass. Каждая конкретная реализация CAPTCHA может определять дополнительные параметры.

`Zend_Captcha_Word` -- абстрактный класс и не может использоваться напрямую.

## Zend_Captcha_Dumb

Адаптер `Zend_Captch_Dumb` генерирует случайную строку, которая должна быть набрана в обратном порядке. Никогда не используйте этот адаптер на реальных проектах, так как его легко взломать. Его следует использовать только в целях тестирования. Адаптер наследует `Zend_Captcha_Word`.

## Zend_Captcha_Figlet

Адаптер `Zend_Captcha_Figlet` aнаследует `Zend_Text_Figlet` и отображает figlet пользователю.

Параметры, передаваемые в конструкторе так же передаются объекту `Zend_Text_Figlet`. Список возможных опций можно посмотреть в разделе о `Zend_Text_Figlet`.

## Zend_Captcha_Image

Адаптер `Zend_Captcha_Image` отрисовывает сгенерированное слово на картинке с искажением и зашумлением, затрудняющими автоматическое распознавание. Адаптер требует расширение GD, скомпилированное с поддержкой шрифтов в формате TrueType или Freetype. На текущий момент адаптер генерирует картинки только в формате PNG.

`Zend_Captcha_Image` наследует `Zend_Captcha_Word`, и предоставляет следующие дополнительные методы:

- `setExpiration($expiration)` и `getExpiration()` задаёт и получает максимальное время жизни файла с изображением. Обычно оно больше времени жизни сессии. Сборка мусора осуществляется каждый раз, когда используется объект CAPTCHA. Время жизни задаётся в секундах.

- `setGcFreq($gcFreq)` и `getGcFreg()` задаёт и получает периодичность сборки мусора. Сборка запускается через каждые `1/$gcFreq` запросов. По умолчанию 100.

- `setFont($font)` и `getFont()` задаёт и получает шрифт, которым отрисовывается слово. Переменная `$font` должна содержать полный квалифицированный путь к файлу со шрифтом. Этот параметр обязателен. CAPTCHA выбросит исключение при попытке отрисовать изображение без указанного файла со шрифтом.

- `setFontSize($fsize)` и `getFontSize()` задаёт и получает размер шрифта в пикселях. По умолчанию 24.

- `setHeight($height)` и `getHeight()` задаёт и получает высоту генерируемого изображения в пикселях. По умолчанию 50.

- `setWidth($width)` и `getWidth()` задаёт и получает ширину генерируемого изображения в пикселях. По умолчанию 200.

- `setImgDir($imgDir)` и `getImgDir()` задаёт получает директорию для хранения сгенерированных изображений CAPTCHA. По умолчанию "`./images/captcha/`", относительно загрузочного скрипта.

- `setImgUrl($imgUrl)` и `getImgUrl()` задаёт и получает относительный путь к CAPTCHA для использования в HTML верстке. По умолчанию "`/images/captcha/`".

- `setSuffix($suffix)` и `getSuffix()` задаёт и получает окончание имени файла CAPTCHA. По умолчанию "`.png`". Примечание: смена этого значения не изменит формат изображения.

- `setDotNoiseLevel($level)` и `getDotNoiseLevel()`, совместно с `setLineNoiseLevel($level)` и `getLineNoiseLevel()`, контролируют зашумлённость изображения случайными точками и линиями. `$level` определяет количество точек и линий. По умолчанию используется 100 точек и 5 линий. Шумы добавляются в два этапа -- до и после искажения картинки.

Все вышеперечисленные параметры могут быть заданы в конструкторе. Нужно только убрать приставку "set" из названия соответствующего метода и привести первую букву к нижнему регистру. Например: "suffix", "height", "imgUrl", и т. д.

## Zend_Captcha_ReCaptcha

Адаптер `Zend_Captcha_ReCaptcha` наследует Zend_Service_ReCaptcha. Реализует следующие методы:

- `setPrivKey($key)` и `getPrivKey()` задаёт и получает секретный ключ, используемый в сервисе ReCaptcha. Ключ должен задаваться во время конструирования объекта, но может быть изменён в любой момент.

- `setPubKey($key)` и `getPubKey()` задаёт и получает публичный ключ для использования в сервисе ReCaptcha. Ключ должен быть задан во время конструирования объекта, но может быть изменён в любой момент.

- `setService(Zend_Service_ReCaptcha $service)` и `getService()` задаёт и получает объект сервиса ReCaptcha.