- Регистрация
- 29 Фев 2008
- Сообщения
- 109
- Реакции
- 47
- Автор темы
- Заблокирован
- #1
Скачал скрипт капчи для форм. всё хорошо работает.
Все что надо сделать что бы форма работала это вставить этот код в форму
И здесь есть небольшой нюанс который я не могу понять.
для того что бы форма могла обратится к скрипту не находяшегося в дериктории с формой.
то для этого надо дописать полный путь. начиная от домена.
допустим скрипт лежит по адресу Для просмотра ссылки Войдиили Зарегистрируйся
Код:
<?php
/** SETTINGS - you can easily modify these constants **/
DEFINE('COLOR', "Красный");
DEFINE('SIZE', 5);
DEFINE('LINEHEIGHT', 4);
DEFINE('QUESTION', "Для продолжение решите уравнение:");
/** SETTINGS - you can easily modify these constants **/
class MathGuard {
/** you can also modify $output to your needs **/
function produceOutput($prime) {
$a = rand() % 10; // generates the random number
$b = rand() % 10; // generates the random number
$code = MathGuard :: generateCode($a, $b, $prime);
// please don't remove the backlink, thank you
$output = "<a href='WWW.Parini.ru/'></a> " . QUESTION .
"<table border='0'><tr><td></td></tr><tr><td><pre style='font-size:" . SIZE . "px; font-weight: bold; color: " . COLOR . "; padding:0px; margin: 0px; line-height:" . LINEHEIGHT . "px;'>\n\n" . MathGuard :: renderExpression($a, $b) . "</pre></td>
<td><input type='input' name='mathguard_answer' size='2' maxlength='2'/><input type='hidden' name='mathguard_code' value='$code' /></td>
</tr>
</table>
";
return $output;
}
/** function that converts the decimal number to line of 3 random characters
* @param $dec decimal number that is being converted to line of 3 random characters
* */
function decToBin($dec) {
$pattern = "123456789ABCDEFGHIJKLMNOPQRTSTUWXYZ"; //without zero, it was interpreted as an empty space
$output = " ";
$i = 0;
do {
if ($dec % 2) {
$rand = rand() % 34;
$output {
2 - $i }
= $pattern {
$rand };
} else {
$output {
2 - $i }
= " ";
}
$dec = (int) ($dec / 2);
$i++;
} while ($dec > 0);
return $output;
}
/** function that renders a final 3x5 matrix consisting of random characters
* @param $a random number a that renders to the 3x5 matrix consisting of random characters
* @param $b random number b that renders to the 3x5 matrix consisting of random characters
* */
function renderExpression($a, $b) {
$number = array (
array (
7,
5,
5,
5,
7
),
array (
2,
6,
2,
2,
7
),
array (
7,
1,
7,
4,
7
),
array (
7,
1,
7,
1,
7
),
array (
4,
5,
7,
1,
1
),
array (
7,
4,
7,
1,
7
),
array (
7,
4,
7,
5,
7
),
array (
7,
1,
1,
1,
1
),
array (
7,
5,
7,
5,
7
),
array (
7,
5,
7,
1,
7
)
);
$plus = array (
0,
2,
7,
2,
0
);
$eq = array (
0,
7,
0,
7,
0
);
for ($line = 0; $line < 5; $line++) {
$output .= MathGuard :: decToBin($number[$a][$line]) . " " . MathGuard :: decToBin($plus[$line]) . " " . MathGuard :: decToBin($number[$b][$line]) . " " . MathGuard :: decToBin($eq[$line]) . "\n";
$output = str_replace("0", " ", $output);
}
return $output;
}
/** A main hashing function: concat of user's answer, hour and the additional prime number (default 37) */
function encode($input, $prime) {
return md5($input . date("H") . $prime);
}
/** This function generates the hash code from the two numbers
* @param $a first number
* @param $b second sumber
* @param $prime additional number to encode with
* */
function generateCode($a, $b, $prime) {
$code = MathGuard :: encode($a + $b, $prime);
return $code;
}
/** This function checks whether the answer and generated security code match
* @param $mathguard_answer answer the user has entered
* @param $mathguard_code hashcode the mathguard has generated
*/
function checkResult($mathguard_answer, $mathguard_code, $prime = 37) {
// echo("prime; $prime, $mathguard_answer");
$result_encoded = MathGuard :: encode($mathguard_answer, $prime);
if ($result_encoded == $mathguard_code)
return true;
else
return false;
}
/** this function inserts the two math term into your form, the parameter is optional */
function insertQuestion($prime = 37) { //default prime is 37, you can change it when specifying the different parameter
$output = MathGuard :: produceOutput($prime);
echo $output;
}
/** this function returns math expression into your form, the parameter is optional
* quite simmilar to insertQuestion, but returns the output as a text instead of echoing
*/
function returnQuestion($prime = 37) { //default prime is 37, you can change it when specifying the different parameter
$output = MathGuard :: produceOutput($prime);
return $output;
}
}
?>
Код:
<?php require("ClassMathGuard.php"); MathGuard::insertQuestion(); ?>
<br/><br/>
для того что бы форма могла обратится к скрипту не находяшегося в дериктории с формой.
то для этого надо дописать полный путь. начиная от домена.
допустим скрипт лежит по адресу Для просмотра ссылки Войди
однако данный код выдаёт ошибку.то тогда код должен выклядить так
<?php require("http://WWW.mysaite.ru/antispam/ClassMathGuard.php"); MathGuard::insertQuestion(); ?>
<br/><br/>
по не понятным для меня причинам. Поскажите в чём тут дело???Warning: require(C:\Program Files\VertrigoServ\www \ClassMathGuard.php) [function.require]: failed to open stream: Invalid argument in C:\Program Files\VertrigoServ\www\t\index.php on line 19
Fatal error: require() [function.require]: Failed opening required 'C:\Program Files\VertrigoServ\www \ClassMathGuard.php' (include_path='.;C:\Program Files\VertrigoServ\Smarty') in C:\Program Files\VertrigoServ\www\t\index.php on line 19