Главная / Zend Manual Core
Работа с captcha

Адаптеры 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 может определять дополнительные параметры.

Note: 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.


Работа с captcha