Решил я тут немного изучить CURL... В итоге родился новый сервис, который, на мой взгляд, может сильно облегчить жизнь новичкам, да и профессионалам тоже... прошу оценить, любая критика приветствуется! Этот сервис позволяет легко установить проверку "Капчу" на любые формы. Для работы сервиса нужно подключить небольшой файл с двумя функциями и написать несколько строчек простейшего кода... вообщем есть пример - сами разберетесь ))) Принцип работы следующий: есть некий КЛЮЧ - любое слово из букв и цифр, при выводе формы генерируется КОД, пара КЛЮЧ-КОД отправляются на сервер, который возвращает ссылку на капчу, эта ссылка вставляется в форму, в эту же форму в скрытое поле вставляется КОД. т.к. пользователь (или робот) не знает КЛЮЧА он не может определить по коду капчу. После отправки формы, скрипт получает введенную капчу и КОД и отправляет на сервер полученные капчу, КОД и свой КЛЮЧ - сервер проверяет совпадает ли капча с парой КЛЮЧ-КОД и результат возвращает скрипту. Пример работы посмотреть можно тут: http://test.web-portfolio.ru/cap_test.php Скачать можно тут: http://www.dsfile.com/capcha/ Версия 2.0 Сделано в новой версии: 1. Отказался от cURL в пользу file_get_contents (спасибо Mr.M.I.T.) Версия 1.1 Сделано в новой версии: 1. Добавлена еще одна капча от DMT (http://dmtsoft.ru) 2. Добавлены настройки капчи. 3. Теперь на выбор два варианта капчи: простая и сложная (по умолчанию) 4. Можно задать матрицу символов, которые применяются в капче 5. Можно указать кол-во символов 6. Можно изменить цвет фона и цвет символов. Версия 1.0 бета Реализован только механизм. Исходники примеров: PHP: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Test Capcha</title> </head> <body> <?php $capcha_key = 'qwerty'; // Это КЛЮЧЬ - он должен быть одинаковым в файле с формой и в скрипте, который обрабатывает данные формы! include_once 'capcha.inc'; function capcha_OK () { echo "Ваше сообщение допущено!";} function capcha_ERROR () { echo "ОШИБКА! Ваше сообщение НЕ допущено!"; } ?> <form id="form1" name="form1" method="post" action=""> <input name="code" type="hidden" value="<?=$code?>" /> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="3"> <textarea name="text" id="text" cols="45" rows="5">Сообщение</textarea> </td> </tr> <tr> <td colspan="3"> Введите код с картинки: </td> </tr> <tr> <td width="93" align="right" valign="middle"> <input name="capcha_val" type="text" id="code" size="10" maxlength="10" /> </td> <td width="115" align="left" valign="middle"> <img src="<?=$capcha_img_src?>" /> </td> <td width="78" align="right"> <input type="submit" name="send" id="send" value="Отправить" /> </td> </tr> </table> </form> </body> </html> Файл 'capcha.inc': PHP: <?php //========================================== // НАСТРОЙКИ: // Тип капчи: // 0 - Capcha by DMT ([url=http://dmtsoft.ru]http://dmtsoft.ru[/url]) // 1 - Простая капча. $cap_mode = 0; //Матрица символов: //$cap_matrix = 'Q1WqEaRzT2YwUsIxO3PedKcJ4HrGfFvD5StAgZbX6CyVhBnN7Mujm8ik9oL0p'; // Все символы [a-Z0-9] (кроме 'l' - маленькая L) $cap_matrix = 'QAZWSXEDCRFVTGBYHNUJMIKLP'; // для типа 0 - только заглавные буквы! //Количество символов $cap_len = 5; //Цвет фона и цвет символов $cap_bg = ''; // без значений - значения по умолчанию $cap_cl = ''; // примеры: 'ff0000', '00f' //========================================== $code = md5(rand(999,999999).rand(999,999999).rand(999,999999)); $capcha_img_src = img_url ($capcha_key,$code); $capcha_code = $_POST['code']; $capcha_val = $_POST['capcha_val']; if ($_POST['text']) if (check($capcha_key,$capcha_code,$capcha_val)) {capcha_OK ();} else {capcha_ERROR ();} function img_url ($key,$code) { global $cap_mode,$cap_matrix,$cap_len,$cap_bg,$cap_cl; $url = "http://dsfile.com/capcha.php?get=img&key={$key}&code={$code}"; $url .= "&cap_mode={$cap_mode}&cap_matrix={$cap_matrix}&cap_len={$cap_len}&cap_bg={$cap_bg}&cap_cl={$cap_cl}"; $result = file_get_contents($url); return $result; } function check ($key,$code,$capcha_val) { global $cap_mode,$cap_matrix,$cap_len,$cap_bg,$cap_cl; $url = "http://dsfile.com/capcha.php?get=check&key={$key}&code={$code}&capcha_val={$capcha_val}"; $url .= "&cap_mode=$cap_mode&cap_matrix=$cap_matrix&cap_len=$cap_len&cap_bg=$cap_bg&cap_cl=$cap_cl"; $result = file_get_contents($url); if (trim($result)=='1') return true; else return false; } ?>
В ближайшее время добалю несколько переменных для настройки капчи: - Еще один вариант капчи, будет на выбор два варианта: простая и сложная (по умолчанию) - Матрица символов - можно будет задать символы которые применяются в капче - Кол-во символов - Цвет фона и цвет символов - Размеры капчи Если есть еще идеи - оставляйте тут.
Я прошу прощения, я тут давно не появлялся. Добрый вечер, буду краток. Выдвигаю не идею и не критику, скорее предожение. Если это сервис, то может его лучше интегрировать так: HTML: <img src="http://captcha-service.ru/image.jpg&rand=client-side-rand&apikey=12341234123412412341341234324" ...> Само собой без curl и js
а в чем собственно говоря преимущество от использования такого сервиса перед обыкновенной генерацией капчи у себя?
Примуществ несколько: 1. Основное - простота использования и интеграции, не надо запариваться с куками и сессией. 2. Если текущий алгоритм генерации капчи будет взломан, он будет обновлен без вашего участия. 3. Гибкая настройка (в будущем) У меня на моем движке есть самописный модуль для реализации капчи, но я сам постепенно переведу все на этот сервис т.к. нынешняя реализация очень геморна в установке... приходится каждый раз вспомниать алгоритм работы, а он в капче достаточно мудренный...
Нет такой вариант не подходит т.к. на сервер кроме КОДА отправляется КЛЮЧ - который пользователь не должен знать! А вданной реализации и ключ и код идут GET-параметрами...
Почему? Если у кого то робот научился распозновать капчу то она меняется причем сразу у всех... что плохого? Или Вы хотите подождать пока Вашу капчу распознают и потом сидеть и писать новый алгоритм рисования капчи?
Ну так там будут на выбор несколько разных вариантов, ты можешь предложить свой я его добавлю - если есть готовый код - это дело 5 минут
Версия 1.1 (http://dsfile.com/capcha/) Сделано в новой версии: 1. Добавлена еще одна капча от DMT (http://dmtsoft.ru) 2. Добавлены настройки капчи. 3. Теперь на выбор два варианта капчи: простая и сложная (по умолчанию) 4. Можно задать матрицу символов, которые применяются в капче 5. Можно указать кол-во символов 6. Можно изменить цвет фона и цвет символов.
http://recaptcha.net/ - на флеше правда решение. Честно говоря, нарисовать картинку с буквами - не такая уж проблема.
реализовать можно проще, это раз. Даёт нам картинку <img src="http://captcha.ru/image.php?user_id=007"> Даёт нам то что было на ней написано $code=file_get_content("http://captcha.ru/code.php?user_id=007&password=bond"); подобные решения делать на пхп - мягко скажем, не комильфо, это два =)
Это проще, но: 1. требует регистрацию на сервере. 2. В этом случае, я так понимаю, будет всегда один и тот же код на капче? ))) 3. Или если не один, что если одновременно несколько человек на сайте форму заполняют? Им каждому выдалась разная капча и что тогда вернет http://captcha.ru/code.php?user_id=007&password=bond ? Хм... а на чем их тогда делать, на Perl'e? 8-/
$code=file_get_content("http://captcha.ru/code.php?user_id=007&password=bond"); чем не регистрация? зачем? добавь ещё один параметр
Ну по первому взляду: Плюсы: 1. Не требует регистрации 2. Проще в установке 3. Проще в работе 4. Более гибко встраивается в форму (насколько я понял у ReCaptcha 1 форма на 1 учетку) 5. На выбор несколько вариантов каптчи 6. Настраиваемая цветовая схема Минусы: 1. Не такая красивая 2. Менее функциональная 3. Нет голосового оповещения (его хоть раз кто то использовал?!) 4. Проекту 2 дня и веду его я один ) Ну что бы окончательно понять плюсы и минусы надо попробывать и то и другое...
Mr.M.I.T. Возможна и твоя реализация и еще сотня других... Для твоей необходима база данных для хранения, у меня все обрабатывает один скрипт из 120 строк, и без БД... Чем проще тем надежнее ))) P.S. Хотя у меня можно заменит cURL на file_get_content! я подумаю над этим )))
Сервис автоматизирован! ))) Генерится она будет скриптом на сервере dsfile.com/capcha и выкидываться в виде картинки. На этом же сервере происходит сравнение введенных символов с капчей, а твой скрипт получает результат - правильно введена капча или нет (true or false).
А ну возможно... Я посмотрел пример что форма тянется с учетки, т.е. как я понял каждую форму нужно строить и настраивать в учетке ReCaptcha? А нет... это у них просто примеры такие )))