MyWackoSite: WackoWikiRecaptcha ...

Home Page | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация | Вход:  Пароль:  
Это старая версия WackoWikiRecaptcha за 2007-07-05 15:51:12..
Оглавление документа

Установка ReCaptcha на WackoWiki R4.2

1. Заходим на сайт http://recaptcha.net/, регистрируемся, получаем private и public ключи для вашего домена, и скачиваем библиотеку с php-кодом.
Копируем ее себе на сайт, разархивируем. Запоминаем где у вас на сервере лежит файлик 'recaptchalib.php'.

2. Заходим в домашнюю директорию WackoWiki.

Редактируем файл «actions/registration.php»

В самое начало файла, до кода

добавляем, заменяя :



Далее, ищем строки:


Сразу посли них дописываем:


Теперь собственно добавляем саму форму ReCaptcha – ищем строки:

и сразу после них добавляем:

После этого все должно заработать.

Возможные проблемы и методы решения

Глобальные переменные в библиотеке ReCaptcha

По каким то причинам, после интеграции ReCaptcha в WackoWiki, ничего не заработало. После изучения кода библиотеки было обнаружено, что в файле “recaptchalib.php” не видны глобальные переменные. Решение проблемы состоит в том, чтобы
1. Заккоментировать эти самые глобальные переменные в коде библиотеки и их использование с помощью оператора globals.
2. В каждую функцию, где используются эти переменные просто скопировать их.

Рассмотрим причины такого поведения библиотеки ReCaptcha, встроенной в WackoWiki.
Итак, запускается файл wacco.php с передаными ему параметрами
в нем создается объект класса Wacko и запускается функйия этого объекта Run(). Внутри этой функции происходит вызов многих других функций этого класса, и одна из этих функций делает include для файла registration.php, которая в свою очередь делает inlcude для библиотеки ReCaptcha. Но вспомним, что include в данном случае – это простое текстовое включение. Т.е. весь файл включается внутрь тела функции. Но в этом файле существуют переменные, которые библиотека считает глобальными, но после включения внутрь функции становятся локальными для этой функции, и получается что глобальных переменных с такими именами нет.

$data = $this->Format($this->page["body_r"], “post_wacko”, array(«bad”=>"good”));$data = $this->Format($this->page["body”], “wakka”);
*** Wacko Wiki / lib / recaptchalib.php? 2007–06–05 11:34:40.000000000 +0700

MWackoWiki/lib/recaptchalib.php 2007–07–05 09:47:07.307574744 +0700
***
* 37,41 **
*/
– $recaptcha_api_server = 'http://api.recaptcha.net';
– $recaptcha_api_secure_server = 'https://api-secure.recaptcha.net';
– $recaptcha_verify_server = 'api-verify.recaptcha.net';

37,38
***
* 108,110 **
{
! global $recaptcha_api_server, $recaptcha_api_secure_server;

105,108
{
! $recaptcha_api_server = 'http://api.recaptcha.net';
! $recaptcha_api_secure_server = 'https://api-secure.recaptcha.net';
***
* 126,130 **
<noscript>
! <iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br>
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
! <input type="hidden" name="recaptcha_response_field" value="manual_challenge">
</noscript>';

124,128
<noscript>
! <iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br />
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
! <input type="hidden" name="recaptcha_response_field" value="manual_challenge" />
</noscript>';
***
* 172,174 **
! global $recaptcha_verify_server;
$response = _recaptcha_http_post ($recaptcha_verify_server, «/verify»,

170,172
! $recaptcha_verify_server = 'api-verify.recaptcha.net';
$response = _recaptcha_http_post ($recaptcha_verify_server, «/verify»,

*** Wacko Wiki / handlers / page / show.php? 2005–02–26 19:16:34.000000000 +0600

MWackoWiki/handlers/page/show.php 2007–07–05 09:33:21.021189368 +0700
***
* 47,49 **
// display page
! $data = $this->Format($this->page["body_r"], “post_wacko”, array(«bad”=>"good”));
$data = $this->Numerate Toc?( $data ); // numerate toc if needed

47,51
// display page
! /*Captcha BEGIN*/
! $data = $this->Format($this->page["body"], “wakka”);
! /*Captcha END*/
$data = $this->Numerate Toc?( $data ); // numerate toc if needed

*** Wacko Wiki / actions / registration.php? 2005–02–26 20:23:20.000000000 +0600

MWackoWiki/actions/registration.php 2007–07–05 09:58:44.835534376 +0700
***
* 1 **

1,20
+ <?php
+ /*Captcha BEGIN*/
+ require_once('lib/recaptchalib.php');
+ $publickey = «public_key_полученный_при_регистрации_recaptcha»;
+ $privatekey = «private_key_полученный_при_регистрации_recaptcha»;
+
+ # the response from reCAPTCHA
+ $resp = null;
+
+ # was there a reCAPTCHA response?
+ if ($_POST["recaptcha_response_field"]) {
+ $resp = recaptcha_check_answer ($privatekey,
+ $_SERVER["REMOTE_ADDR"],
+ $_POST["recaptcha_challenge_field"],
+ $_POST["recaptcha_response_field"]);
+ }
+ /*Captcha END*/
+ ?>
+
<!notypo>
***
* 40,41 **

59,63
else if (strlen($password) < 5) $error = $this->Get Resource Value?("Password Too Short?");
+ /*Captcha BEGIN*/
+ else if ($resp==null || !($resp->is_valid)) { $error = $resp->error;}
+ /*Captcha END*/
else
***
* 126,127 **

148,156
</tr>
+ <!Captcha BEGIN>
+ <tr><td align="right">Captcha</td><td>
+ <?php
+ echo recaptcha_get_html($publickey, $error);
+ ?>
+ </td></tr>
+ <!Captcha END>
<tr>
%%

Скрипт автоматической установки

Доступен здесь: http://swsoft.nsu.ru/~abaturin/recaptcha_install.tar.gz
Установка: разархивируйте куда-нибудь и прочитайте readme.txt.

Ссылки

Сайт WackoWiki: http://wackowiki.com/
Сайт ReCapture: http://recaptcha.net/
Английская версия этого документа: http://swsoft.nsu.ru/WackoWiki/WackoWikiRecaptchaEN
 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]