ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Циклы при GD
  #1  
Старый 13.12.2008, 21:38
Аватар для Ru}{eeZ
Ru}{eeZ
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме:
956872

Репутация: 186
Отправить сообщение для Ru}{eeZ с помощью ICQ
По умолчанию Циклы при GD

Через циклы заношу рандомные данные в общую переменную, для того, чтобы поместить их в сессию. Но почему то после цикла (и for, и foreach) переменная $rand чтоли как-то "унсетится", т.е. "удаляется" чтоли... и естественно картинка не отображается. Что не так?
PHP код:
for($i 0$i 6$i++) $rand[] = $abc[mt_rand(0,22)];
//foreach($rand as $randOne) $fullRand = $randOne;
for($i 0$i 6$i++) $fullRand .= $rand[$i];
$_SESSION['captcha'] = $fullRand;
for(
$i 0$i 6$i++) imageTtfText($image,mt_rand(12,15),mt_rand(-20,20),15 $i mt_rand(4,8),mt_rand(20,25),$color[$i],'arial.ttf',$rand[$i]); 

Последний раз редактировалось Ru}{eeZ; 13.12.2008 в 21:40..
 
Ответить с цитированием

  #2  
Старый 13.12.2008, 21:41
Аватар для Kaimi
Kaimi
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме:
18127311

Репутация: 1676


Отправить сообщение для Kaimi с помощью ICQ
По умолчанию

А ты её объяви до циклов, типа
$rand = array();
 
Ответить с цитированием

  #3  
Старый 13.12.2008, 21:55
Аватар для Ru}{eeZ
Ru}{eeZ
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме:
956872

Репутация: 186
Отправить сообщение для Ru}{eeZ с помощью ICQ
По умолчанию

если пустые квадратные скобки - php автоматически создаёт массив, т.е., если без циклов, то всё отлично работает.
п.с. на всякий случай попробовал. безуспешно...
 
Ответить с цитированием

  #4  
Старый 14.12.2008, 02:25
Аватар для optimazer
optimazer
Познающий
Регистрация: 04.12.2008
Сообщений: 46
Провел на форуме:
148562

Репутация: 57
По умолчанию

2Chaak
=))))))

2Ru}{eeZ

... генерируешь случайную или псевдослучайную последовательность $rc1, запоминаешь его в сессию
и выводишь её в капчу

Цитата:
<?php
$image = imageCreate(100, 30);

$bg = imagecolorallocate($image, 255, 255, 255);
$textcolor = imagecolorallocate($image, 109, 81, 147);

// читаешь случайные переменные из сессии
session_start();
$rc1 = $_SESSION['rc'];


imageString($image, 4, 10, 10, $rc1, $textcolor);

//header("Content-type: image/gif");
header("Content-type: image/png");

imageInterlace($image, 1);

imageColorTransparent($image, $colorBackgr);

//imageGIF($image);
imagePNG($image);
?>
вышеописанный скрипт называешь kapcha.php

а на странице выводишь
<img src="./путь_к_файлу/kapcha.php">

Последний раз редактировалось optimazer; 14.12.2008 в 02:28..
 
Ответить с цитированием

  #5  
Старый 14.12.2008, 13:29
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

Ru}{eeZ По вопросу - ты не забыл объявить не пустой массив (или строку?) $abc из которого собственно и берешь значения?

З.Ы. чую на одну и ту же капчу, можно будет регаться сколько угодно раз, судя по такому коду
 
Ответить с цитированием

  #6  
Старый 14.12.2008, 18:18
Аватар для optimazer
optimazer
Познающий
Регистрация: 04.12.2008
Сообщений: 46
Провел на форуме:
148562

Репутация: 57
По умолчанию

2Gifts
смотря какую случайную последовательность выводить будешь!

к примеру если последовательность задается рандомом
Цитата:
$rand = rand(10000000000,9999999999);
$_SESSION['rc'] = $rand;
и при каждом запросе обновляется
то на одну и ту же капчу попасть очень сложно =))))

а для пущей сложности можно цифры повертеть, добавить буквы или логику с арифметикой...
 
Ответить с цитированием

  #7  
Старый 14.12.2008, 18:41
Аватар для Chaak
Chaak
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме:
5321514

Репутация: 3313


Отправить сообщение для Chaak с помощью ICQ
По умолчанию

Цитата:
Сообщение от optimazer  
2Gifts
смотря какую случайную последовательность выводить будешь!

к примеру если последовательность задается рандомом

и при каждом запросе обновляется
то на одну и ту же капчу попасть очень сложно =))))

а для пущей сложности можно цифры повертеть, добавить буквы или логику с арифметикой...
Какая разница сколько цифр генерировать ? Главное чтобы боты не распознали и юзеру было удобно вбивать капчи

Цитата:
а для пущей сложности можно цифры повертеть, добавить буквы или логику с арифметикой...
Сложности кого? Пользователя или компютера)?. Ты думаешь компьютер не умеет считать? Он считает лучше тебя только скажи ему посчтитать)

------------------

Рельно использовать разные шрифты / бэкграунды / искажения / фильтры резкости.

Если проект маленький, то зачем выдумывать сложную капчу со всякими там искажениями и прочими извращениями? Достаточно установить уже готовый скрипт:
Цитата:
http://captcha.ru/kcaptcha/
Из готовых решений мой выбор в сторону:
Цитата:
http://recaptcha.net/

Последний раз редактировалось ChaaK; 14.12.2008 в 18:47..
 
Ответить с цитированием

  #8  
Старый 14.12.2008, 18:42
Аватар для m0Hze
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

Цитата:
Сообщение от optimazer  
2Gifts
смотря какую случайную последовательность выводить будешь!

к примеру если последовательность задается рандомом

и при каждом запросе обновляется
то на одну и ту же капчу попасть очень сложно =))))

а для пущей сложности можно цифры повертеть, добавить буквы или логику с арифметикой...
Проще стогда снаала объявить 2 переменные
PHP код:
$rand1 rand(100000000,9999999999);
$rand2 rand(100000000,9999999999);
$rand $rand1 $rand2
Тогда на одну и туже капчу попасть будет практически не возможно.Ну хотя возможно все....но если добавить ну хотябы 3 буквы,например, сначала $rand ставим 1 букву в серебке и в конце.Это легко провернуть, и тогда получиться убойная капча Ж)
 
Ответить с цитированием

  #9  
Старый 14.12.2008, 19:26
Аватар для optimazer
optimazer
Познающий
Регистрация: 04.12.2008
Сообщений: 46
Провел на форуме:
148562

Репутация: 57
По умолчанию

2ChaaK
я в курсе! спасибо.

и полностью поддерживаю что проще пользоваться фреймвёрками!

однако:

Цитата:
Сложности кого? Пользователя или компютера)?
Сложности капчи, для того чтобы боты не распознали!

а про логику с арифметикой: пример
сгенери боту капчу
Цитата:
rand_A плюс rand_B минус rand_C равно?
а еще буквы искази
и пускай хоть обчитается и обсчитается!
 
Ответить с цитированием

  #10  
Старый 15.12.2008, 15:30
Аватар для Ru}{eeZ
Ru}{eeZ
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме:
956872

Репутация: 186
Отправить сообщение для Ru}{eeZ с помощью ICQ
По умолчанию

вернёмся к вопросу...
если написать:
for($i = 0; $i < 6; $i++) $fullRand = $rand[$i];
без точки, то естественно с каждым разом переменная $fullRand будет просто получать новые данные, но тогда всё работает, т.е. будет браться только последняя буква из капчи, а нужно, что бы всё буквы брались и заносились в одну переменную, для того, чтобы записать их в сессию. Это срабатывает, НО! Капча не выводится т.к. до неё не доходит $fullRand.
Ну и вот вам в общем капча, чтобы не разбегались в догадках...
PHP код:
<?php
session_start
();
$image imageCreate(10030);
imageColorAllocate($image255255255);
for(
$i 0$i 10$i++) $color[] = imageColorAllocate($imagemt_rand(0,240), mt_rand(0,240), mt_rand(0,240));
$abc = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','1','2','3','4','5','6','7','8','9');
for(
$i 0$i 6$i++) $rand[] = $abc[mt_rand(0,22)];
foreach(
$rand as $randOne$fullRand .= $randOne;
//for($i = 0; $i < 6; $i++) $fullRand .= $rand[$i];
$_SESSION['captcha'] = $fullRand;
for(
$i 0$i 6$i++) imageTtfText($image,mt_rand(12,15),mt_rand(-20,20),15 $i mt_rand(4,8),mt_rand(20,25),$color[$i],'arial.ttf',$rand[$i]);
for(
$i 0$i 3$i++) imageArc($imagemt_rand(0,90), mt_rand(0,20), mt_rand(10,60), mt_rand(10,60), mt_rand(-380,0), mt_rand(0,380), $color[$i]); 
header('Content-type: image/png');
imagePng($image);
?>
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват Gsm пакетов SNIFF Сотовый фрикинг 16 27.12.2009 22:25
Как «растянуть» аккумулятор novichok Сотовый фрикинг 4 28.02.2006 22:47
химия своими руками silveran Болталка 43 11.01.2006 22:05



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ